实时错误 ‘91’ 对象变量或with块变量未设置” 解决办法

一,引言

不管我们在做学生系统还是机房收费系统,在过程中总会遇到“实时错误‘91’ ”这个错误,但是在学生系统里遇到之后也没有深究,并不知道是哪里的错误,在做机房的时候遇到是就有了一定的了解。

二,分析

当出现这种情况时先不要盲目的去做,去搜,先想一下,可能会发生这些错误的原因有哪些?开始做之前的一些准备工作有没有做好,像数据库配置,ODBC的连接,一些查询语句的书写,代码的书写,以及数据库中的有没有数据,在看完这些没问题之后再找其他原因,站在巨人的肩膀上,找看看他们的解决办法。

三,可能出现这种问题的情况

1.ODBC连接没成功
2.VB模块中连接数据库的代码,用户名,密码和ODBC不同步
3.代码中语句出错,连接不到数据库中所要连接的表

四,我遇到时代码的提示位置

实时错误 ‘91’ 对象变量或with块变量未设置” 解决办法_第1张图片

> >   txtsql = "select * from user_Info where userID = '" &
> > txtUserName.Text & "'"
> >         Set mrc = ExecuteSQL(txtsql, msgtext)
> >     If mrc.EOF Then
> >           MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly, "提示"
> >           txtUserName = ""
> >           txtPassword = ""
> >     Exit Sub
> >     End If     ```
> If mrc.EOF Then

在以下这句代码中提示,当在这里提示的时候我们肯定会想到数据库中有没有记录,有没有把想要的信息添加进去,既然在有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中的不一样。
实时错误 ‘91’ 对象变量或with块变量未设置” 解决办法_第2张图片
实时错误 ‘91’ 对象变量或with块变量未设置” 解决办法_第3张图片

通过对比,发现代码中的User ID哪里有下划线,而数据库中没有,把代码中和数据库输出一致的发现这个错误解决了。

你可能感兴趣的:(--VB版机房收费系统,【机房收费系统】)