在学生信息管理系统调试的过程中,经常会弹如下图所示的一个提示框(一般会出现在点击查询和修改的某一项内容时),而且调试起来还特别的烧脑☹,但是解决这个bug的过程中,会理解很多概念上的东西,当然这些知识点在之后也是会常用到的……
问题:
实时错误‘3021’:
BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
出现此问题的是如下图所示的代码部分:
出现这个问题的原因非常简单,就是数据库中想要查询的表中没有记录所导致的。
解决方法:
添加入下所示的代码段即可(适当修改)
If mrc.RecordCount = 0 Then '查询数据库中数据的记录总数,如果没有记录则弹出提示框
MsgBox "没有记录,请关闭修改窗口!", vbOKOnly + vbExclamation, "警告"
'当数据库中没有相关数据时 让查询窗口中的按钮控件失效
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
cmdCancel.Enabled = False
cmdDelete.Enabled = False
cmdEdit.Enabled = False
cmdupdate.Enabled = False
Else
'select得到的临时表,游标指向尾记录,在Access中指向第一条
mrc.MoveFirst
Call viewData
mcbookmark = mrc.Bookmark '做标记
mcclean = True
End If
知识点:
BOF和EOF的区别:
BOF:(Before of File)指当前记录位置位于RecordSet对象的第一个记录之前
EOF:(End of File)指当前记录位置位于RecordSet对象的最后一个记录之后
BOF和EOF的属性值均返回为布尔型:True和False,使用BOF和 EOF 属性可确定 Recordset 对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。
BOF | EOF | |
True | 当前行的位置是在第一行之前,无记录 | 当前行的位置是在最后一行的后面,无记录 |
False | 当前行的位置是在第一行或第一行之后,有记录 | 当前行的位置是在最后一行或最后一行前面,有记录 |
以上只是BOF和EOF很基础很基础的区别,除此之外……☟☟
▷最最最最最后分享一个师哥的博客链接:https://blog.csdn.net/mrbaymax/article/details/77415669 师哥的博客中关于BOF和EOF的知识点总结的非常非常详细鸭☺