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

一,引言

不管我们在做学生系统还是机房收费系统,在过程中总会遇到“实时错误‘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 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中的不一样。
这里写图片描述
这里写图片描述

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

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
这个错误通常是因为程序中引用了一个被初始化的对象变量。请检查程序代码,确保使用对象变量之前已经将其初始化。 以下是一些可能导致这个错误的常见原因: 1. 正确设置对象变量 如果您使用了对象变量,例如 `Range` 或 `Worksheet`,请确保在使用前已经为其分配了一个对象。例如,下面的代码会导致一个类型为“对象变量或 With 变量设置”的运行时错误: ``` Dim ws As Worksheet ws.Cells(1, 1) = "Hello" ``` 在上述代码中,我们声明了一个名为 `ws` 的工作表对象变量,但没有为其分配一个工作表对象。因此,在尝试使用 `ws` 对象的 `Cells` 属性时,会触发运行时错误。要解决这个问题,我们应该先为 `ws` 分配一个工作表对象,例如: ``` Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") ws.Cells(1, 1) = "Hello" ``` 在上述代码中,我们使用 `Set` 关键字为 `ws` 分配了一个工作表对象,这样就可以安全地使用 `ws` 对象的 `Cells` 属性了。 2. 正确初始化变量 如果您使用了一个变量,但在使用前没有对其进行初始化,则会触发“对象变量或 With 变量设置”的运行时错误。例如,下面的代码会引发这个错误: ``` Dim myVar As String myVar = myVar & "Hello" ``` 在上述代码中,我们声明了一个名为 `myVar` 的字符串变量,但没有为其赋值。因此,在尝试将字符串“Hello”添加到 `myVar` 变量时,会触发运行时错误。要解决这个问题,我们应该在使用 `myVar` 变量之前为其赋值,例如: ``` Dim myVar As String myVar = "" myVar = myVar & "Hello" ``` 在上述代码中,我们将空字符串赋值给了 `myVar` 变量,这样就可以安全地将字符串“Hello”添加到 `myVar` 变量中了。 请检查您的程序代码,确保所有的对象变量变量在使用前都已经被正确初始化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值