我现在是边学边改书上的程序,有很多不懂的地方,先谢谢大家帮助!^_^之前定义了mrc(string)、mcclean(boolean)和mybook(Variant)三个变量。Private Sub updateCommand_Click()
    Dim txtSQL As String,   Dim MsgText As String,  Dim mrcc As ADODB.Recordset
    
    If mcclean Then
        MsgBox "请先修改课程信息", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
    If Not Testtxt(txtCourseno.Text) Then
        MsgBox "请输入课程编号!", vbOKOnly + vbExclamation, "警告"
        txtCourseno.SetFocus
        Exit Sub
    End If
      ......(此处是和上面一样的 if 检查语句)        mrc.Delete
    txtSQL = "select * from course_Info where course_No = '" & Trim(txtCourseno.Text) & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    If mrcc.EOF = False Then
        MsgBox "课程编号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
        mrcc.Close
        txtCourseno.SetFocus
    Else
        mrcc.Close
        mrc.AddNew
        mrc.Fields(0) = Trim(txtCourseno.Text)
        mrc.Fields(1) = Trim(txtCoursename.Text)
        mrc.Fields(2) = Trim(comboCoursetype.Text)
        mrc.Fields(3) = Trim(txtCoursedes.Text)
        mrc.Update
        MsgBox "修改课程信息成功!", vbOKOnly + vbExclamation, "警告"
        mrc.Book = myBook
        Call viewData        mcclean = True
    End If
End Sub可现在的问题是:以上的语句作用是先删除了原来的数据记录,然后在最后一条记录后面添加的新记录。我自己的想法是:让它直接更新,就象在T-SQL中运用update命令一样,麻烦大家给我一点提示。再次感谢!

解决方案 »

  1.   

    Private Sub Command3_Click()
    On Error Resume Next
    If Command3.Caption = "修改" Then
       Text1.Locked = False: Text2.Locked = False
       Text1.SetFocus
       Command3.Caption = "保存修改"
    ElseIf MsgBox("请确认要执行该修改吗?", vbInformation + vbYesNo, "修改记录") = vbYes Then
         '-----------------第一种写法之一--直接修改记录集 (吐血推荐!)
                            '(关键是在窗体加载时要把文本框绑定到记录集对应的字段)
                            '让网格中记录的移动和记录集中记录的移动--通过文本框来保持同步
                            '或者在网格的单击事件中写保持同步的语句(见下面)
        
        myres.Fields(0).Value = Text1.Text
        myres.Fields(1).Value = Text2.Text     '-----------------第一种写法之二'    myres!username = Text1.Text  '!和字段名之间不能有空格
    '    myres!password = Text2.Text    
         '-----------------第二种写法--调用记录集对象的Execute方法--执行SQL语句
    '    mycon.BeginTrans
    '    mycon.Execute "update user_password set username='" & Text1 & "',password='" & Text2 & "' " & _
    '                  "where username='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "' and password='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 2) & "' "
    '    mycon.CommitTrans
         
         '-----------------第三、四、五种写法:“先查后改”,确保不会去修改别的记录(书中所采用的方法,有点麻烦)
         
         '-----------------第三种写法:调用记录集对象的Find方法进行查找 (Find后面 接SQL语句Where子句中的内容!)(抛弃!)
    '     myres.Find "username='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "' and password='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 2) & "'"
    '     myres.Fields(0).Value = Text1.Text
    '     myres.Fields(1).Value = Text2.Text
         
         '-----------------第四种写法:调用记录集对象的Filter属性进行查找 (Filter后面 接SQL语句Where子句中的内容!)
    '     myres.MoveFirst
    '     myres.Filter = "username='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "' and password='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 2) & "'"
    '     myres.Fields(0).Value = Text1.Text
    '     myres.Fields(1).Value = Text2.Text     '-----------------第五种写法:调用记录集对象的Open方法进行查找
    '      If myres.State = 1 Then myres.Close
    '      myres.Open "select * from user_password where username='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 1) & "' and password='" & Me.MSHFlexGrid1.TextMatrix(Me.MSHFlexGrid1.Row, 2) & "'", mycon, , , 1
    '      myres.Fields(0).Value = Text1.Text
    '      myres.Fields(1).Value = Text2.Text
          
       myres.Update
       Form_Load
       MsgBox "记录修改成功!"
    Else
       Form_Load
    End If
    End Sub