您的位置:首页 > 其它

实时错误‘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、数据库对应的相应的表中无数据:

             当要查询的表中无数据时也可能会出现这个错误,这时需要去数据库对应的相应的表中填上相关的数据。
         
       注意:


                  出现无效使用值NULL这个错误时,往往是因为数据表中某个属性无值,如一条记录中的性别没填。



     
    
  小结:出现问题不可怕,你要相信你不是第一个出现这个问题

的人,办法总比困难多,只要坚持,成功就离你不远了。

                
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: