程序直接运行没有错误,但是exe文件在本机执行就出现:“运行时错误'91':未设置对象变量或with block变量”我的有个登陆界面,输入用户名和密码后确认才出现此问题,请高手指教,十分着急,谢谢^_^
程序单步执行都是没问题的,每个数据库都操作过,没有错误
部分代码:
Private Sub Command2_Click()
    Form6.Adodc1.RecordSource = "select * from 值班员注册表" _
    & " where 账号 = '" & txtUserName.Text & "'" _
    & " and 密码 = '" & txtPassword.Text & "'"
    
    Form6.Adodc1.Refresh
    
    If Form6.Adodc1.Recordset.RecordCount = 1 Then
        LoginSucceeded = True
        Form6.Adodc1.Recordset.Close
        DutyNum = Val(txtUserName.Text)
        Me.Hide
        MsgBox "OK"               '到此处没有问题
        Form1.Show
    Else
        Form6.Adodc1.Recordset.Close
        MsgBox "无效的密码,请重试!", , "登录"
        txtPassword.SetFocus
    End If
    
End SubPrivate Sub Form_Load()
    MsgBox "OK"     '出现这个提示前就出现了错误
    Dim FileName$
    Dim rsmn As New ADODB.Recordset
    Dim cnStr As String
    Dim i As Integer
    
    For i = 0 To 3
        WebBrowser2(i).Navigate (App.Path & "\gif046.gif ")
        WebBrowser2(i).Visible = False
        SysStatue(i) = False
    Next
    
    FileName = App.Path & "\ZDA.mdb"
    conn.CursorLocation = adUseClient
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & FileName & ""
    
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    MSComm1.InputMode = comInputModeBinary
    
    cnStr = "select * from 上下班记录表"
    rsmn.Open cnStr, conn, adOpenKeyset, adLockPessimistic    rsmn.AddNew    rsmn("值班员号").Value = frmLogin.txtUserName
    rsmn("上下班记录").Value = "上班"
    rsmn("日期").Value = Format(Now, "yyyy-mm-dd")
    rsmn("时间").Value = Format(Now, "hh:mm:ss")
    rsmn.Update
    rsmn.CloseEnd Sub似乎在执行Form1.Show之前做了什么??在VB单步执行看不到?单步执行或直接在VB运行操作都没出现问题,现在用VB生成exe文件执行就出现了这个错误:运行时错误‘91’:未设置对象变量或 With Block变量
希望高手指点,万分感谢

解决方案 »

  1.   

    在菜单:工程->引用 里面找 Microsoft ActiveX Data Object 2.8 Library
      

  2.   

    数据库和exe在同一目录
    在数据库链接属性里面测试链接成功
      

  3.   

    窗体模块级变量定义有问题,不要用new定义,在模块里全部定义为object,然后在load事件中用createobject创建对象。
      

  4.   

    估计是Form6.Adodc1里的连接字符串里的库路径用的绝对路径 那当然是调试时好使,编译后由于exe路径的变化导致连不上数据库
    你可以把exe和数据库放入工程所在路径验证下
      

  5.   

    我的exe和数据库几乎说有的相关文件我都拷在一起呀
      

  6.   

    改成createoject试试看看,是否是在创建对象时出错的。或者移除窗体上面的全局变量到过程中然后再看出错位置。
      

  7.   

    楼上的大哥
    啥是createoject呀
    我才学的 不明白 给说简单点 谢谢了
      

  8.   

    登录窗体使用了其他窗体的adodc导致的,在登录窗体加adodc就可以解决了
      

  9.   

    同样拖一个adodc到登录的窗体上,然后和其他的一样连接,然后把form6的字样去掉
      

  10.   

    不行呀
    我改过了
    把所有的有类似情况的都改了
    生成exe文件执行依然是个问题呀
    Private Sub Command2_Click()
        Adodc1.RecordSource = "select * from 值班员注册表" _
        & " where 账号 = '" & txtUserName.Text & "'" _
        & " and 密码 = '" & txtPassword.Text & "'"
        
        Adodc1.Refresh
        
        If Adodc1.Recordset.RecordCount = 1 Then
            LoginSucceeded = True
            Adodc1.Recordset.Close
            DutyNum = Val(txtUserName.Text)
            Me.Hide
            Form1.Show
        Else
            Adodc1.Recordset.Close
            MsgBox "无效的密码,请重试!", , "登录"
            txtPassword.SetFocus
        End If
        
    End Sub
      

  11.   

    数据库不对是啥意思呀?
    我在VB运行是没问题的
    就是生成EXE出现这个问题的
      

  12.   

    基本来说就是数据库打不开找不到数据库,Adodc1的数据源如果是固化的绝对路径 这就会随数据库位置的变化而出错
      

  13.   

    但是我的数据库位置没变化呀,而且是在本机运行的exe