实时错误‘91’:对象变量或With块变量未设置——学生系统调错总结二
2016-06-26 19:16
309 查看
上一篇博客,我总结了由于粗心而不该犯的一些错误:
点击打开链接
今天来总结一下实时错误‘91’:对象变量或With块变量未设置
出现这个问题的主要原因:“数据库未连接成功”,以下是几种错误类型:
1. odbc没有配置好:
在运行程序之前没有配置ODBC数据源或者ODBC数据源配置错误,当然前提得是SQL
Server执行了相关的SQL代码(学生系统中用到的student.mdb文件)。
(1)、win7的服务器是local
,win8的是主机名,以下是链接:(win7的操作类似)
window8如何配置ODBC连接数据库
注意:VB中模块代码: ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123456"中的
FileDSN是配置的数据源的名称,而不是连接的数据库的名称。
(2)、ODBC数据源配置错误,以下这个例子是摘抄的内容:
[vb] view
plain copy
print?
'调用ExecuteSQL函数执行SQL语句获得结果集
strSQL = "select * from user_Info where user_ID='" & txtUserName.Text & "'"
Set objRs = ExecuteSQL(strSQL, strMsg)
创建对象变量有两个步骤。第一,必须先声明对象变量。然后必须用 Set 语句将一个正确的引用赋值给对象变量。同样地,With...End With 块必须先用 With 语句进入点来执行初始化。
此错误有以下的原因:
试图使用的对象变量,还没有用一个正确对象的引用来赋值。
我错误的原因:模块代码中设定的密码和ODBC配置过程设定的不一样,导致了Set语句无法将一个正确的引用赋值给对象变量。
解决方法:
给对象变量指定或再指定一个引用。例如,如果在下列的代码中省略 Set 语句的话,那么引用 MyObject 将会产生错误:
[vb] view
plain copy
print?
Dim MyObject As Object ' 创建对象变量。
Set MyObject = Sheets(1) ' 创建一个正确的对象引用。
MyCount = MyObject.Count ' 计数值赋给 MyCount。
试图用的对象变量已经被设为 Nothing。
Set MyObject = Nothing ' 释放此对象。
MyCount = MyObject.Count ' 引用了已释放的对象。
再指定引用给对象变量。例如,使用新的 Set 语句给对象设置新的引用。
此对象是正确的对象,但没有被设置,因为在对象库中,在 “引用” 对话框中没有被选取。
在 “添加引用” 对话框选择对象库。
在 With 块内GoTo 语句的去向。
不要跳进 With 块。确保块使用 With 语句进入点以执行初始化。
我的解决方法:修改模块中的用户名名称和相应的密码。
[vb] view
plain copy
print?
Public Function ConnectString() As String
'**************************************************
'作用:设置数据库连接字符串
'输入参数:无
'返回值:需要的数据库连接字符串connectString
'修改日期:2013.8.1
'作者:Senior_Lee
'**************************************************
ConnectString = "FileDSN=student.dsn;UID=lee;PWD=123"
End Function
2、代码问题,大多数情况是查询语句有问题
比如:
(1)、SQL语句之间少了空格:txtSQL
= "select* fromstudent_Info"
(2)、在执行查询学生学籍信息的窗体中,执行语句txtSQL
= "select * from result_Info where",因为后面还要添加条件,所以在‘where’和‘
" ’之间缺少空格时会出错。
(3)、在一句完全的查询语句中,比如 txtSQL = "select * fromclass_Info where class_No='" & Trim(txtClassno.Text) &"'",其中在最后判断输入框中的条件时,双引号和单引号一定要注意(整句话的引号从外到内一共分三层:双引号,单引号,双引号),既不可破坏其顺序层次,也不能丢三落四。
如图:
(4)、代码写错:将mrcc写为mrc.
3、数据库设置有问题:
(1)、先判断数据库是否安装成功;
(2)、是否添加(水平高的也可以自己创建)数据库,以下是在SQL
sever 中添 加自己的数据库的方法: 点击打开链接
(3)、有没有把sql语句导入运行
(4)、连接数据库的时候是否更改验证方法
(5)、登录名和密码是否设置
(6)、SQLsever配置管理器的sever服务是否该开启的开启了。
比如:
开启步骤: 开始→Microsoft SQL Server 2008→配置工具→SQL Server配置管理器→SQL Server 服务→SQLServer 代理(MSSQLSERVER)→右击→启动
修改后为:
(7)、逻辑错误:缺少语句,在给执行语句txtSQL正确赋值之后,直接操作数据库中的数据,说通俗点就是还没连上数据库就对其进行操作。在赋值之后直接执行对数据库的增删改查,完全把调用判断和连接数据库的函数executeSQl抛在脑后。
这是从小伙伴的博客里看到的:
Executesql函数:
定义的executesql函数有两个参数,一个是sql,一个是msgstring,sql是用来存放sql查询语句的,msgstring是用来存放返回结果的,即使成功了,还是失败了,最后把查询到的结果返回给定义的记录集变量mrc.
像下面的代码,功能就是把查询到的结果集返回给mrc.
4、数据库对应的相应的表中无数据:
当要查询的表中无数据时也可能会出现这个错误,这时需要去数据库对应的相应的表中填上相关的数据。
注意:
小结:出现问题不可怕,你要相信你不是第一个出现这个问题
的人,办法总比困难多,只要坚持,成功就离你不远了。
点击打开链接
出现这个问题的主要原因:“数据库未连接成功”,以下是几种错误类型:
1. odbc没有配置好:
在运行程序之前没有配置ODBC数据源或者ODBC数据源配置错误,当然前提得是SQL
Server执行了相关的SQL代码(学生系统中用到的student.mdb文件)。
(1)、win7的服务器是local
,win8的是主机名,以下是链接:(win7的操作类似)
window8如何配置ODBC连接数据库
注意:VB中模块代码: ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123456"中的
FileDSN是配置的数据源的名称,而不是连接的数据库的名称。
(2)、ODBC数据源配置错误,以下这个例子是摘抄的内容:
[vb] view
plain copy
print?
'调用ExecuteSQL函数执行SQL语句获得结果集
strSQL = "select * from user_Info where user_ID='" & txtUserName.Text & "'"
Set objRs = ExecuteSQL(strSQL, strMsg)
创建对象变量有两个步骤。第一,必须先声明对象变量。然后必须用 Set 语句将一个正确的引用赋值给对象变量。同样地,With...End With 块必须先用 With 语句进入点来执行初始化。
此错误有以下的原因:
试图使用的对象变量,还没有用一个正确对象的引用来赋值。
我错误的原因:模块代码中设定的密码和ODBC配置过程设定的不一样,导致了Set语句无法将一个正确的引用赋值给对象变量。
解决方法:
给对象变量指定或再指定一个引用。例如,如果在下列的代码中省略 Set 语句的话,那么引用 MyObject 将会产生错误:
[vb] view
plain copy
print?
Dim MyObject As Object ' 创建对象变量。
Set MyObject = Sheets(1) ' 创建一个正确的对象引用。
MyCount = MyObject.Count ' 计数值赋给 MyCount。
试图用的对象变量已经被设为 Nothing。
Set MyObject = Nothing ' 释放此对象。
MyCount = MyObject.Count ' 引用了已释放的对象。
再指定引用给对象变量。例如,使用新的 Set 语句给对象设置新的引用。
此对象是正确的对象,但没有被设置,因为在对象库中,在 “引用” 对话框中没有被选取。
在 “添加引用” 对话框选择对象库。
在 With 块内GoTo 语句的去向。
不要跳进 With 块。确保块使用 With 语句进入点以执行初始化。
我的解决方法:修改模块中的用户名名称和相应的密码。
[vb] view
plain copy
print?
Public Function ConnectString() As String
'**************************************************
'作用:设置数据库连接字符串
'输入参数:无
'返回值:需要的数据库连接字符串connectString
'修改日期:2013.8.1
'作者:Senior_Lee
'**************************************************
ConnectString = "FileDSN=student.dsn;UID=lee;PWD=123"
End Function
2、代码问题,大多数情况是查询语句有问题
比如:
(1)、SQL语句之间少了空格:txtSQL
= "select* fromstudent_Info"
(2)、在执行查询学生学籍信息的窗体中,执行语句txtSQL
= "select * from result_Info where",因为后面还要添加条件,所以在‘where’和‘
" ’之间缺少空格时会出错。
(3)、在一句完全的查询语句中,比如 txtSQL = "select * fromclass_Info where class_No='" & Trim(txtClassno.Text) &"'",其中在最后判断输入框中的条件时,双引号和单引号一定要注意(整句话的引号从外到内一共分三层:双引号,单引号,双引号),既不可破坏其顺序层次,也不能丢三落四。
如图:
(4)、代码写错:将mrcc写为mrc.
3、数据库设置有问题:
(1)、先判断数据库是否安装成功;
(2)、是否添加(水平高的也可以自己创建)数据库,以下是在SQL
sever 中添 加自己的数据库的方法: 点击打开链接
(3)、有没有把sql语句导入运行
(4)、连接数据库的时候是否更改验证方法
(5)、登录名和密码是否设置
(6)、SQLsever配置管理器的sever服务是否该开启的开启了。
比如:
开启步骤: 开始→Microsoft SQL Server 2008→配置工具→SQL Server配置管理器→SQL Server 服务→SQLServer 代理(MSSQLSERVER)→右击→启动
修改后为:
(7)、逻辑错误:缺少语句,在给执行语句txtSQL正确赋值之后,直接操作数据库中的数据,说通俗点就是还没连上数据库就对其进行操作。在赋值之后直接执行对数据库的增删改查,完全把调用判断和连接数据库的函数executeSQl抛在脑后。
这是从小伙伴的博客里看到的:
Executesql函数:
定义的executesql函数有两个参数,一个是sql,一个是msgstring,sql是用来存放sql查询语句的,msgstring是用来存放返回结果的,即使成功了,还是失败了,最后把查询到的结果返回给定义的记录集变量mrc.
像下面的代码,功能就是把查询到的结果集返回给mrc.
4、数据库对应的相应的表中无数据:
当要查询的表中无数据时也可能会出现这个错误,这时需要去数据库对应的相应的表中填上相关的数据。
注意:
出现无效使用值NULL这个错误时,往往是因为数据表中某个属性无值,如一条记录中的性别没填。
小结:出现问题不可怕,你要相信你不是第一个出现这个问题
的人,办法总比困难多,只要坚持,成功就离你不远了。
相关文章推荐
- 【51CTO学院三周年】Linux想说爱你很容易
- 关于java Abstract的理解
- 基于51单片机简易操作系统设计
- 第二章:probability distribution exercise 1-11
- 微信支付SDK的使用
- 时间序列分析1.基本数学概念
- HDU 5122 K.Bro Sorting
- 连续最大子序列和的几种算法
- java.lang.IllegalArgumentException: Service Intent must be explicit解决方法
- MySQl之最全且必会的sql语句
- MySQl之最全且必会的sql语句
- HDU 3078 LCA转RMQ
- [翻译]AKKA笔记 -ACTOR SUPERVISION - 8
- 【中间件】(二):学习中间件不得不了解的基础知识
- Java(八) Collection集合必备知识
- 合并果子。。。(脑抽ing~)
- pycharm2016.1.4专业版破解码
- Android中自定义View的MeasureSpec使用
- python 金字塔图形
- C#设计模式—观察者模式