我用ADODB这个控件通过ODBC和SQL SERVER相连,然后文本控件TEXTBOX和ADODB相连,连好后增加、删除都可以用,就是我在text控件中修改数据后不能保存,点前一个记录和后一个记录都报错说是操作被取消。我都绑定好了,为什么修改总是出错。 
  会不会是 Adodc1.Recordset.Book 没设的过呢,请问 Book方法如何用?

解决方案 »

  1.   

    Private Sub cmdupdate_Click()
    Dim txtsql, msgtext As String
    Dim mrcc As adodb.Recordset
    If mcclean Then
    MsgBox "请先修改成绩信息", vbOKOnly + vbExclamation, "警告"
    Exit Sub
    End IfIf Not testtxt(comboexamtype.Text) Then
    MsgBox "请输入考试编号!", vbOKOnly + vbExclamation, "警告"
    comboexamtype.SetFocus
    Exit Sub
    End IfIf Not testtxt(comboclassno.Text) Then
    MsgBox "请输入班号!", vbOKOnly + vbExclamation, "警告"
    comboclassno.SetFocus
    Exit Sub
    End IfIf Not testtxt(combosid.Text) Then
    MsgBox "请选择学号!", vbOKOnly + vbExclamation, "警告"
    combosid.SetFocus
    Exit Sub
    End IfIf Not testtxt(txtname.Text) Then
    MsgBox "请输入姓名!", vbOKOnly + vbExclamation, "警告"
    txtname.SetFocus
    Exit Sub
    End IfIf Not testtxt(combocourse.Text) Then
    MsgBox "请选择课程!", vbOKOnly + vbExclamation, "警告"
    combocourse.SetFocus
    Exit Sub
    End IfIf Not testtxt(txtresult.Text) Then
    MsgBox "请输入分数!", vbOKOnly + vbExclamation, "警告"
    txtresult.SetFocus
    Exit Sub
    End If
    If Not IsNumeric(Trim(comboclassno.Text)) Then
    MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
    Exit Sub
    comboclassno.SetFocus
    End IfIf Not IsNumeric(Trim(txtresult.Text)) Then
    MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
    Exit Sub
    txtresult.SetFocus
    End IfIf Not IsNumeric(Trim(combosid.Text)) Then
    MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
    Exit Sub
    txtsid.SetFocus
    End If
    mrc.Deletetxtsql = "select * from result_info where student_id='" & Trim(combosid.Text) & "'"
    Set mrcc = executesql(txtsql, msgtext)
    If mrcc.EOF = False Then
    MsgBox "学号重复,请重新输入!", vbOKOnly + vbExclamation, "警告"
    mrcc.Close
    txtsid.SetFocus
    Else
    mrc.AddNew
    mrc.Fields(0) = Trim(comboexamtype.Text)
    mrc.Fields(1) = Trim(combosid.Text)
    mrc.Fields(2) = Trim(txtname.Text)mrc.Fields(3) = Trim(comboclassno.Text)
    mrc.Fields(4) = Trim(combocourse.Text)
    mrc.Fields(5) = Trim(txtresult.Text)mrc.Update
    MsgBox "修改成绩信息成功", vbOKOnly + vbExclamation, "修改成绩信息"
    mrc.Book = mybook
    Call viewdata
    Frame2.Enabled = True
    cmdfirst.Enabled = True
    cmdprevious.Enabled = True
    cmdnext.Enabled = True
    cmdlast.Enabled = Truecomboexamtype.Enabled = False
    comboclassno.Enabled = False
    combosid.Enabled = False
    txtname.Enabled = False
    combocourse.Enabled = False
    txtresult.Enabled = Falsemcclean = True                                   '指的是:在修改完毕之后又恢复到修改状态
    End IfEnd Sub注意一下这里的,mrc.Book = mybook用法,,,,,上面还有一处作标签的地方是 mybook=mrc.Book
      

  2.   

    mybook=mrc.Book 这句在哪写啊,我怎么找不到
      

  3.   

    Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
      
         Select Case Button.Index
            Case 1 ''前进              '修改后点击此键出错,且不能保存,提示操作被取消
               '  On Error GoTo First_err
                Adodc1.Recordset.MovePrevious
                If Adodc1.Recordset.BOF = True Then
                  Adodc1.Recordset.MoveFirst
                End If
    'First_err:
           '    MsgBox Err.Description, vbOKOnly + vbExclamation, "警告"
               
            Case 2 ''后退               '修改后点击此键出错,且不能保存,提示操作被取消
               ' On Error GoTo second_err
                Adodc1.Recordset.MoveNext
                If Adodc1.Recordset.EOF = True Then
                  Adodc1.Recordset.MoveLast
                End If
    'second_err:
               'MsgBox Err.Description, vbOKOnly + vbExclamation, "警告"
           
             Case 4 ''增加
                On Error GoTo add_error
                 Adodc1.Recordset.AddNewadd_error:
                   If Err.Number = 3426 Then
                    MsgBox "已经使用过添加记录!   错误:" & Err & "," & Err.Description, 0, "提示"
                    Unload Me
                    End If
                Toolbar1.Buttons(1).Visible = False
                Toolbar1.Buttons(2).Visible = False
                Toolbar1.Buttons(4).Visible = False
                Toolbar1.Buttons(5).Visible = True
                Toolbar1.Buttons(6).Visible = True
                Toolbar1.Buttons(7).Visible = False
            Case 5 ''确定           ‘修改后不能保存为什么??????
                    On Error GoTo update_error
                    If Text1.Text = "" Then
                        MsgBox "必须填写元器件名称!", 0, "提示"
                        Exit Sub
                    End If
                    If Text2.Text = "" Then
                        MsgBox "必须填写元器件型号!", 0, "提示"
                        Exit Sub
                    End If
    ‘         Adodc1.Recordset.Book = Varbook1     ’不知如何用,在哪给Varbook1值               ’  Adodc1.Recordset.Fields(1) = Text1
                    ‘ Adodc1.Recordset.Fields(2) = Text2
                    ’ Adodc1.Recordset.Update
             
                update_error:
                       If Err.Number = 3020 Then
                        MsgBox "请先添加记录!   错误:" & Err & "," & Err.Description, 0, "提示"
                        Unload Me
                        End If
                    Toolbar1.Buttons(1).Visible = True
                    Toolbar1.Buttons(2).Visible = True
                    Toolbar1.Buttons(4).Visible = True
                    Toolbar1.Buttons(5).Visible = True
                    Toolbar1.Buttons(6).Visible = True
                    Toolbar1.Buttons(7).Visible = True
            Case 6 ''取消
            On Error GoTo CanceErr'        Adodc1.Recordset.Edit
            Adodc1.Recordset.CancelUpdate
            Toolbar1.Buttons(1).Visible = True
            Toolbar1.Buttons(2).Visible = True
            Toolbar1.Buttons(4).Visible = True
            Toolbar1.Buttons(5).Visible = True
            Toolbar1.Buttons(6).Visible = True
            Toolbar1.Buttons(7).Visible = True
    CanceErr:
            If Err.Number = 3021 Then
             MsgBox "没有记录!   错误:" & Err & "," & Err.Description, 0, "提示"
            End If
            Case 7 ''删除
            On Error GoTo del_error
               a = MsgBox("真的删除吗?", vbExclamation + vbOKCancel + vbApplicationModal, "删除记录")
            If a = 1 Then
                Adodc1.Recordset.Delete
              Adodc1.Recordset.MoveLast
               End If
            If a = 2 Then Exit Sub
    del_error:
               If Err.Number = 3426 Then
               MsgBox "已经全部删除!   错误:" & Err & "," & Err.Description, 0, "提示"
              Unload Me
              End If
            End Select
    End Sub
      

  4.   

    在修改记录集中的数据前,先检查数据库是否可以更新:
    使用以下代码检查:
    if adodc1.readonly=true or adodc1.database.updatable=false or _ adodc1.recordset.updatable=false then
    msgbox"该数据库无法更新“
    end if
      

  5.   

    adodc1.readonly, adodc1.database ,adodc1.recordset.updatable这些方法我的机子咋显示不出来
      

  6.   

    Private Sub Command2_Click()            
     '这种方法也不行,跟书上一样打的,为什么还是不行
                   objCn.Open
                   Set objRs.ActiveConnection = objCn
                   
                    objRs.UpdateBatch adAffectAllChapters
                    Set objRs.ActiveConnection = Nothing
                    objRs.Close
                    objCn.Close
                     MsgBox "保存操作已经成功完成!", 0, "提示"
                    
    End SubPrivate Sub Form_Load()
           
             Set objCn = New Connection
             With objCn
                .Provider = "SQLOLEDB"
                .ConnectionString = "user id=sa;pwd=123;data source=qifeng;" & "Initial Catalog=jyglxt"
                .Open
            End With
            Set objRs = New Recordset
            With objRs
              .CursorLocation = adUseClient
              .LockType = adLockBatchOptimistic
              .Open "select * from organ_name_database", objCn
              Set .ActiveConnection = Nothing
            End With
            objCn.Close
              
             
             Set Text1.DataSource = objRs
             Text1.DataField = "名称"
             Set Text2.DataSource = objRs
             Text2.DataField = "型号"
             
             txtmsg = objRs.AbsolutePosition & "/" & objRs.RecordCountEnd Sub