当我在ADODC对Mysql新建的数据库添加记录时产生的错误提示:BOF 或EOF中有一个“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

解决方案 »

  1.   

    你看看是不是你把记录集的光标移到了记录集的首尾位置了试试在你添加记录之前
    if not adodc1.recordset.eof and not adodc1.recordset.bof
       adodc1.addnew
       ......
       adodc1.update
    end if
      

  2.   

    我有将记录移到最后然后再在datagrid中添加记录。
    帮我看看吧,我的这段程序是其他地方抄袭过来的,我有些看不懂。
    主要是下面的三个方法
    1.Adodc1_WillChangeRecord
    2.cmdAdd
    3.cmdDelete
    希望越详细越好!!
    Private Sub Form_Load()
        Cnstring = "DRIVER={MySQL ODBC 3.51 Driver};" _
                                   & "SERVER=143.116.229.201;" _
                                   & " DATABASE=cable;" _
                                   & "UID=root;PWD=; OPTION=35"      '使用MySQL数据库
        condition = "select * from usermng "
        rs.Open condition, Cnstring, adOpenKeyset, 2              
        Adodc1.ConnectionString = Cnstring
        Adodc1.CommandType = adCmdUnknown
        Adodc1.RecordSource = condition
        Adodc1.Refresh
        Set DataGrid1.DataSource = Adodc1
        DataGrid1.ReBind
        DataGrid1.Refresh
    End SubPrivate Sub Adodc1_Movecomplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
       Adodc1.Caption = "Record: " & CStr(Adodc1.Recordset.AbsolutePosition)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      Screen.MousePointer = vbDefault
      rs.Close
      Set rs = Nothing
      Unload Me
    End SubPrivate Sub Adodc1_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
      '错误处理程序代码置于此处
      '想要忽略错误,注释掉下一行
      '想要捕获它们,在此添加代码以处理它们
      MsgBox "Data error event hit err:" & Description
    End Sub
    Private Sub Adodc1_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
      '验证代码置于此处
      '下列动作发生时该事件被调用
      Dim bCancel As Boolean
      Select Case adReason
      Case adRsnAddNew
      Case adRsnClose
      Case adRsnDelete
      Case adRsnFirstChange
      Case adRsnMove
      Case adRsnRequery
      Case adRsnResynch
      Case adRsnUndoAddNew
      Case adRsnUndoDelete
      Case adRsnUndoUpdate
      Case adRsnUpdate
      End Select
      If bCancel Then adStatus = adStatusCancel
    End Sub
    Private Sub cmdAdd_Click()
         On Error GoTo AddErr
      Adodc1.Recordset.MoveLast            'Adodc1的记录移到最后,在最后面加一条记录
      Adodc1.Recordset.AddNew
      DataGrid1.SetFocus
      SendKeys "{down}"
      Adodc1.Recordset.Update
      Exit Sub
    AddErr:
      MsgBox Err.Description
    End Sub
    Private Sub cmdDelete_Click()
      On Error GoTo DeleteErr
      Dim Msg, Style, Title, Help, Ctxt, Response, MyString
      Msg = "This Action will delete current record,Do you want to continue ?"   ' 定义信息。
      Style = vbYesNo + vbCritical + vbDefaultButton2   ' 定义按钮。
      Title = "MsgBox Demonstration"   ' 定义标题。
      Help = "DEMO.HLP"   ' 定义帮助文件。
      Ctxt = 1000   ' 定义标题
              ' 上下文。
              ' 显示信息。
      Response = MsgBox(Msg, Style, Title, Help, Ctxt)
      If Response = vbYes Then   ' 用户按下“是”。
        With Adodc1.Recordset
          .Delete
          .MoveNext
          If .EOF Then .MoveLast
        End With
      End If
      Exit Sub
    DeleteErr:
      MsgBox Err.Description
    End Sub
    Private Sub cmdRefresh_Click()
        '只有多用户应用程序需要
      On Error GoTo RefreshErr
      Adodc1.Refresh                   '刷新Adodc1的记录
      Exit Sub
    RefreshErr:
      MsgBox Err.Description
    End Sub
    Private Sub cmdUpdate_Click()
      On Error GoTo UpdateErr
      Adodc1.Recordset.UpdateBatch adAffectAll         '更新所有的记录
      Exit Sub
    UpdateErr:
      MsgBox Err.Description
    End Sub
    Private Sub cmdClose_Click()
      Unload Me
    End Sub
      

  3.   

    To SoHo_Andy(冰) :  我的状态是mysql数据库里没有记录,而我要通过adodc与datagrid1的绑定来为数据库里添加记录.
     我的错误在我添加时发生:
    "BOF 或EOF中有一个“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。"
    这个问题我已经通过手动添加记录已经解决了.
     但是现在发现我的数据源好像有些问题,它没有记录结束的符号"*"、而且最后的一条记录也不是空记录,所以当我添加记录时系统指向的是我有用的一条记录,似乎是要我更改记录.
     SoHo_Andy(冰):
     我想问一下数据库的实际记录的情况是怎样!我怎样才能添加一条空记录到数据库里!谢谢了!