Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

来个大虾帮我注释下这段程序

王鹏  发表于:2014-04-04 14:43:47  
复制

Private Sub CmdMakeCJSheet_Click()
On Error GoTo Err_CmdMakeCJSheet_Click
Dim Rs1 As ADODB.Recordset
Dim Rs2 As ADODB.Recordset
Dim StrTemp As String
Dim iTemp As Integer
    Set Rs1 = New ADODB.Recordset
    StrTemp = "Select * From 成绩表"
    Rs1.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Set Rs2 = New ADODB.Recordset
    StrTemp = "Select * From 选课表"
    Rs2.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    If Rs1.RecordCount >= 1 Then
        Rs1.MoveFirst
        For iTemp = 0 To Rs1.RecordCount - 1
            Rs1.Delete 1
            Rs1.Update
            Rs1.MoveNext
        Next iTemp
        If Rs2.RecordCount >= 1 Then
            For iTemp = 0 To Rs2.RecordCount - 1
                Rs1.AddNew
                Rs1("学号") = Rs2("学号")
                Rs1("课程编号") = Rs2("课程编号")
                Rs1.Update
                Rs2.MoveNext
            Next iTemp
        Else
            Exit Sub
        End If
    Else
        If Rs2.RecordCount >= 1 Then
            For iTemp = 0 To Rs2.RecordCount - 1
                Rs1.AddNew
                Rs1("学号") = Rs2("学号")
                Rs1("课程编号") = Rs2("课程编号")
                Rs1.Update
                Rs2.MoveNext
            Next iTemp
        Else
            Exit Sub
        End If
    End If
    Me![InputAchFrm].Requery
    Me![成绩].Locked = False
    MsgBox "生成空成绩单成功,并且可以输入成绩!", vbOKOnly, "生成成绩单完成"
   Me![成绩].Locked = False
    Set Rs1 = Nothing
    Set Rs2 = Nothing
Exit_CmdMakeCJSheet_Click:
    Exit Sub
Err_CmdMakeCJSheet_Click:
    MsgBox Err.Description
    Resume Exit_CmdMakeCJSheet_Click
End Sub

 

Top
在水一方 发表于:2014-04-04 15:26:38
就是利用ado的方式取两个表的【学号】【课程】字段,生成新的成绩表。期间更新了学号,清空了成绩。

煮江品茶 发表于:2014-04-04 16:34:09

这段代码无需这么复杂,如下修改即可:


Private Sub CmdMakeCJSheet_Click()
    '定义两个记录集
    Dim Rs1 As new ADODB.Recordset
    Dim Rs2 As new ADODB.Recordset
 
    '打开两个记录集,也就是将数据表中的数据读入到数据集中。
    Rs1.Open "成绩表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Rs2.Open "选课表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    '清空成绩表,等效的处理:docmd.runsql "delete * from 成绩表"
    For iTemp = 0 To Rs1.RecordCount - 1
        Rs1.Delete 1
        Rs1.Update
        Rs1.MoveNext
    Next iTemp
    '将选课表数据写入成绩表,等效的处理:docmd.runsql "insert into 成绩表 (学号,课程编号) select 学号,课程编号 from 选课表"
    For iTemp = 0 To Rs2.RecordCount - 1
        Rs1.AddNew
        Rs1("学号") = Rs2("学号")
        Rs1("课程编号") = Rs2("课程编号")
        Rs1.Update
        Rs2.MoveNext
    Next iTemp

    Me![InputAchFrm].Requery
    MsgBox "生成空成绩单成功,并且可以输入成绩!", vbOKOnly, "生成成绩单完成"

    Set Rs1 = Nothing
    Set Rs2 = Nothing
End Sub


如果还想简化,三句就足矣:

Private Sub CmdMakeCJSheet_Click()
    currentdb.execute "delete * from 成绩表"
    currentdb.execute "insert into 成绩表 (学号,课程编号) select 学号,课程编号 from 选课表"
    Me![InputAchFrm].Requery
End Sub



总记录:2篇  页次:1/1 9 1 :