最近敲了一个小的练习项目——学生信息管理系统,在调试的过程了出现了一些问题。通过这些过问题又让我学习到了不少新的知识,今天我首先要记录的是”实时错误 ‘3021’“相信大多数人在初次使用VB链接数据库的过程中都会遇到这样的问题。怎么解决实时错误”3021“呢?那还是先让我们了解一下什么是EOF和BOF吧。
使用ADO数据库进行查询的时候,将数据库查询结果返回查询端的时候,在查询端的内存中就会有一个列表,这个列表存放的就是查询的结果集。我们假设mrc是数据集,1、2、3、4为该数据集中的四个数据如下图:
如图我们能很清楚的看到当mrc指向编号-1,这样就符合了BOF的情况;指向5(并不存在这条记录)的时候,这就是EOF的情况。如果同时出现BOF和EOF的情况,就是说指针既在上界之外也在下界之外,这就表示该数据集为空。
出现这种错误的原因:1、我们查找的数据库记录为空;
2、查找到数据后,用Del命令删除记录后,再引用Fields后出现错误;
3、已经用MoveFirst或用MovePrevious命令移动数据库开始后再用MovePrevious命令;
4、已经用MoveLast或用MoveNext命令移动至数据库最后位置后再用MoveNext命令。
解决问题的方法:
如果我们在查询的表中没有数据的话我们可以加上一个错误处理:
On Error resume next
mrc.MoveFirst
If Err=3021 then
Response.Write"无数据!"
End If
当我们删除最后一条记录的时候,引用Fields的过程中也会出现这样的问题,大家可以参考一下以下代码:
Private Sub cmdDelete_Click()
Dim intMsgbox As Integer
m_vntBookmark = m_rstCourseInfo.Bookmark
intMsgbox = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
If intMsgbox = vbOK Then
m_rstCourseInfo.MoveNext
If m_rstCourseInfo.EOF = True Then
m_rstCourseInfo.MovePrevious
m_rstCourseInfo.MovePrevious
If m_rstCourseInfo.BOF = True Then
m_rstCourseInfo.MoveNext
m_rstCourseInfo.Delete
MsgBox "最后一条记录删除,记录为空!", vbOKOnly + vbExclamation, "警告"
Unload Me
Else
m_rstCourseInfo.MoveFirst
m_vntBookmark = m_rstCourseInfo.Bookmark
m_rstCourseInfo.MoveLast
m_rstCourseInfo.Delete
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
Else
m_vntBookmark = m_rstCourseInfo.Bookmark
m_rstCourseInfo.MovePrevious
m_rstCourseInfo.Delete
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
Else
m_rstCourseInfo.Bookmark = m_vntBookmark
Call viewData
End If
End Sub
进一步的整理会在接下来的博客中陆续发布,希望大家能关注!