BOF 或EOF中有一个“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

215300 2003-12-15 07:31:16
当我在ADODC对Mysql新建的数据库添加记录时产生的错误提示:

BOF 或EOF中有一个“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
...全文
197 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
215300 2003-12-17
  • 打赏
  • 举报
回复
To SoHo_Andy(冰) :

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

谢谢了!

SoHo_Andy 2003-12-16
  • 打赏
  • 举报
回复
你的错误发生在哪里
215300 2003-12-16
  • 打赏
  • 举报
回复
另外我可以再为这个问题加分吗?
215300 2003-12-16
  • 打赏
  • 举报
回复
我有将记录移到最后然后再在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 Sub

Private 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 Sub

Private Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
rs.Close
Set rs = Nothing
Unload Me
End Sub

Private 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

axer 2003-12-15
  • 打赏
  • 举报
回复
记录集没有载入到内存里
蜗牛20008 2003-12-15
  • 打赏
  • 举报
回复
根据你的条件,没有数据符合,没有查询到,或者本来就是空表
SoHo_Andy 2003-12-15
  • 打赏
  • 举报
回复
你看看是不是你把记录集的光标移到了记录集的首尾位置了

试试在你添加记录之前
if not adodc1.recordset.eof and not adodc1.recordset.bof
adodc1.addnew
......
adodc1.update
end if

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧