一,前言:
在做学生系统的时候经常会遇到“实时错误‘91’”这个错误,我们亲切的称呼它为“夺命91”,这个错误还是有点麻烦的,但是又必须要解决,不然就没法往下走,所以就硬着头皮正面刚吧。
二,分析:
当出现这种情况时大家不要盲目的去改,去搜,最好先想一下,可能会发生错误91的原因有哪些?开始之前的那些准备工作有没有做好,比如数据库的配置,ODBC的连接,查询语句的书写,代码的问题,以及数据库中是否有数据,在看完这些没问题之后再找其他原因,站在巨人的肩膀上,去看看他们是怎么解决的。
三、问题:
1.ODBC没有连接成功 ;
2.VB模块中连接数据库的代码,用户名、密码和ODBC不同步 ;
3.代码中语句出错,连接不到数据库中所要连接的表。
四、错误位置:
txtsql = "select * from user_Info where userID = '" & txtUserName.Text & "'"
Set mrc = ExecuteSQL(txtsql, msgtext)
If mrc.EOF=true Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly, "提示"
txtUserName.SetFocus
else
…
当在这里提示的时候我们肯定会想到数据库中有没有记录,有没有把想要的信息添加进去,既然在有EOF的这里出现,就再说一下EOF,在说EOF时肯定还有与之相对应的BOF,看看它们的用法:
BOF:指当前记录位置位于Recordset对象的第一个记录之前;
EOF:指当前记录位置位于Recordset对象的最后一个记录之后。
这两个的属性值均返回布尔型:True和False,使用BOF和 EOF 属性可确定 Recordset 对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。 下表即是各自的使用说明及查询结果:
说明:
(1)如果当前记录位于第一个记录之前,BOF 属性将返回 True(-1),如果当前记录为第一个记录或位于其后则将返回 False (0)。
(2)如果当前记录位于 Recordset 对象的最后一个记录之后 EOF 属性将返回True,而当前记录位于 Recordset 对象的最后一个记录或位于其前,则将返回 False。
(3)如果 BOF 或 EOF 属性为 True,则没有当前记录。
(4)如果打开没有记录的 Recordset 对象,BOF 和 EOF 属性将设置为True,而 Recordset 对象的 RecordCount 属性设置为零。打开至少包含一条记录的 Recordset 对象时,第一条记录为当前记录,而BOF 和 EOF 属性为 False。
(5)如果删除 Recordset 对象中保留的最后记录,BOF 和 EOF属性将保持 False,直到重新安排当前记录。
具体用法:
If objRs.BOF Then
表示:当前指针的位置是在第一行记录之前,则…
If objRs.EOF Then
表示:当前指针的位置是在最后一行记录之后,则…
If Not objRs.EOF Then
表示:当前指针的位置没有到达最后一条记录
If Not objRs.BOF then
表示:当前指针的位置没有到达第一条记录
推荐使用下面两条
If Not (objRs.BOF AND objRs.EOF) Then
表示:指针位于RecordSet 的当中(并非是最后一条和第一条) ,说明一定有记录。
If objRs.BOF AND objRs.EOF Then
表示:没有任何记录
五、解决办法:
使三者同步,即查询数据库表的代码规范,语法——ODBC——模块中的用户名,密码,数据库 。我的错误是在 If mrc.EOF Then 这句代码上提示有错,有时我们就会钻牛角尖,这句代码出现错误就在这一句上找,我出现的错误就要从这句话的前面找了。其实找来找去也看是数据库中的表名,列名和VB中的不一样。 所以不要局限于一处地方,要多想想与之有关联的地方。
转载自:https://blog.csdn.net/yyp0304devin/article/details/81006617