程序删除功能一掉删除最后一条记录的时候,删除操作执行成功,但会出现错误提示:实时错误'3021':BOF或EOF中有一个是"真",或者当前记录已被删除,所需的操作要求一个当前的记录.实现删除功能的代码:Private Sub CmdDelete_Click() '删除毕业生信息
If Adodc1.Recordset.RecordCount > 0 Then
a = MsgBox("您确实要删除这条数据吗?", vbYesNo)
If a = vbYes Then
'删除当前记录
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data '调用显示student表中数据的过程
'设置按钮有效或无效
CmdSave.Enabled = False
CmdEsc.Enabled = False
CmdAdd.Enabled = True
CmdModify.Enabled = True
For i = 0 To 3
CmdMD(i).Enabled = True
Next i
End If
End If
End SubPrivate Sub view_data() '声明一个显示student表中数据的过程
With Adodc1.Recordset
'将student表中各字段的值赋给对应的控件
If .Fields("姓名") <> "" Then Text1.text = .Fields("姓名")
If .Fields("性别") <> "" Then Combo1.text = .Fields("性别")
If .Fields("毕业年") <> "" Then Text2.text = .Fields("毕业年")
If .Fields("学校名称") <> "" Then Combo2.text = .Fields("学校名称")
If .Fields("日期") <> "" Then Text3.text = .Fields("日期")
If .Fields("专业名称") <> "" Then Combo3.text = .Fields("专业名称")
If .Fields("修业年限") <> "" Then Text4.text = .Fields("修业年限")
If .Fields("档案材料") <> "" Then Text5.text = .Fields("档案材料")
If .Fields("单位名称") <> "" Then Combo4.text = .Fields("单位名称")
If .Fields("培养方式") <> "" Then Combo5.text = .Fields("培养方式")
If .Fields("报到地址") <> "" Then Text6.text = .Fields("报到地址")
If .Fields("开始日期") <> "" Then DTPicker1.Value = .Fields("开始日期")
If .Fields("结束日期") <> "" Then DTPicker2.Value = .Fields("结束日期")
If .Fields("文件编号") <> "" Then Text13.text = .Fields("文件编号")
If .Fields("备注") <> "" Then Text14.text = .Fields("备注")
End With
End Sub在上面代码中view_data()部分的If .Fields("姓名") <> "" 是出错后编译器指向的代码行,我在CmdDelete_Click()部分已经用
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data
代码对出现的这个错误预先做了避免,为什么还会出现这样的错误提示????????
If Adodc1.Recordset.RecordCount > 0 Then
a = MsgBox("您确实要删除这条数据吗?", vbYesNo)
If a = vbYes Then
'删除当前记录
Adodc1.Recordset.Delete
Adodc1.Recordset.Update
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data '调用显示student表中数据的过程
'设置按钮有效或无效
CmdSave.Enabled = False
CmdEsc.Enabled = False
CmdAdd.Enabled = True
CmdModify.Enabled = True
For i = 0 To 3
CmdMD(i).Enabled = True
Next i
End If
End If
End SubPrivate Sub view_data() '声明一个显示student表中数据的过程
With Adodc1.Recordset
'将student表中各字段的值赋给对应的控件
If .Fields("姓名") <> "" Then Text1.text = .Fields("姓名")
If .Fields("性别") <> "" Then Combo1.text = .Fields("性别")
If .Fields("毕业年") <> "" Then Text2.text = .Fields("毕业年")
If .Fields("学校名称") <> "" Then Combo2.text = .Fields("学校名称")
If .Fields("日期") <> "" Then Text3.text = .Fields("日期")
If .Fields("专业名称") <> "" Then Combo3.text = .Fields("专业名称")
If .Fields("修业年限") <> "" Then Text4.text = .Fields("修业年限")
If .Fields("档案材料") <> "" Then Text5.text = .Fields("档案材料")
If .Fields("单位名称") <> "" Then Combo4.text = .Fields("单位名称")
If .Fields("培养方式") <> "" Then Combo5.text = .Fields("培养方式")
If .Fields("报到地址") <> "" Then Text6.text = .Fields("报到地址")
If .Fields("开始日期") <> "" Then DTPicker1.Value = .Fields("开始日期")
If .Fields("结束日期") <> "" Then DTPicker2.Value = .Fields("结束日期")
If .Fields("文件编号") <> "" Then Text13.text = .Fields("文件编号")
If .Fields("备注") <> "" Then Text14.text = .Fields("备注")
End With
End Sub在上面代码中view_data()部分的If .Fields("姓名") <> "" 是出错后编译器指向的代码行,我在CmdDelete_Click()部分已经用
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data
代码对出现的这个错误预先做了避免,为什么还会出现这样的错误提示????????
解决方案 »
- 如何使用SourceSafe,使用其做过团队开发的朋友指点一下
- 如何写函数使InputBox如何实现输入文本显示为*?
- 用VB写ASP组件时遇到的一个问题
- 【考考您】据说盖茨读大一时写该程序只花了3分钟,你行吗?比较比较,看看你的能力如何?
- 关于 软件版本问题 !!!偶是菜鸟
- excel问题,100分急问!
- 心情不爽,写了个五子棋vb版的,写的不好,请大家看看.顺便散分!!
- VB生成的dll文件如何被powerbuilder调用?
- 怎样把picture控件中的图片保存成jpg文件
- VB6分屏控件
- 如何获得当前 ListView 被选中的 Item ,除了遍历外有没有更好的方法?
- 关于“类”的问题
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data
--------------------------------------------
改为:
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Call view_data
Else
Adodc1.Recordset.MoveFirst
End If
With Adodc1.Recordset
If .EOF Then Exit Sub '<-------------------------加这句
'将student表中各字段的值赋给对应的控件
If .Fields("姓名") <> "" Then Text1.text = .Fields("姓名")
If .Fields("性别") <> "" Then Combo1.text = .Fields("性别")
......
If Adodc1.Recordset.EOF = False Then
Adodc1.Recordset.MoveNext
Else
Adodc1.Recordset.MoveFirst
End If
Call view_data
代码对出现的这个错误预先做了避免,为什么还会出现这样的错误提示????????
----------------------------------------------------------------------------------
看看view_data的 代码,如果 Adodc1.Recordset.EOF 为真,那么在执行到 .Fields("姓名") 时就会发生错误
而上面CmdDelete_Click()的代码,不管都调用 view_data过程,而在view_data过程里又没有进行判断,所以,当EOF为真时,肯定会发生错误
很多情况是null存在出现的错误!!
对于删除给你个通用代码:
模块中:
Public Function 删除信息(strsql As String)
Debug.Print strsql
On Error GoTo myerr
If mycls.cn.State = adStateclose Then
mycls.cn.Open
End If
mycls.cn.Execute (strsql)
If mycls.cn.State = adStateOpen Then
mycls.cn.Close
End If
删除信息 = 1
Exit Function
myerr:
If mycls.cn.State = adStateOpen Then
mycls.cn.Close
End If
删除信息 = 0
End Function
类中:
Public cn As New ADODB.Connection
Private Sub Class_Initialize()
cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & App.Path & "\BillDB.mdb"
End Sub
窗体事件中:
if Call 删除信息("delete from Department")=0 then
msgbox "数据删除失败",vbokonly+32,"Message"
end if
call 数据显示("select * from Department")
1.数据上一条 下一条等操作
If mycls.cn.State = adStateclose Then
mycls.cn.Open
End Ifmycls.cn.open
set rs=mycls.cn.execute("select * from department")
if not rs.eof and not rs.bof then
rs.movenext
if rs.eof=true then
rs.movelast
end if
endif
If mycls.cn.State = adStateopen Then
mycls.cn.close
End If
2.用于查找
....
if not rs.eof and not rs.bof then
do while rs.eof=false
...
...
rs.movenext
loop
end if
if rs.fields("name")<>"" then
..
..
end if
可以解决上述问题