大家好,我的系统在登入时变出现91错误(对象变量或with变量未设置)
请大家帮我看看是怎么回事,如何修改谢谢了。
Dim msg As String
Dim SQL As String
Private Sub CmdOK_Click()
    Dim rst As ADODB.Recordset
    Dim password As String
    '判断密码是否正确
    Sys_UserID = Trim(txtUserId.Text)
    SQL = " select userID,password from 用户信息表 where userID='" & Sys_UserID & "'"
    Set rst = SelectSQL(SQL, msg)
    If rst.RecordCount > 0 Then    '如果存在该用户
        password = Trim(rst.Fields(1))
        rst.Close
    Else
        If InsertUserInfo Then     '如果输入的是读者号,且用户是第一次登陆
            MsgBox ("欢迎读者使用,请你修改密码!")
        Else
            MsgBox ("用户ID或密码错误!")
        End If
        Exit Sub
    End If
    
    If password = Trim(txtPassword.Text) Then
      Sys_LoginSucceeded = True
      LibInfoSerSys.Show
      Unload Me
    Else
      MsgBox ("密码错误!")
      Sys_LoginSucceeded = False
    End If
End Sub
Private Function InsertUserInfo() As Boolean
'如果输入的是读者号,且用户是第一次登陆,自动添加到用户列表
'返回true,如果不是读者号,返回false
    Dim rst As ADODB.Recordset
    SQL = " select * from 读者信息表 where readerID='" & Sys_UserID & "'"
    Set rst = SelectSQL(SQL, msg)
    If rst.RecordCount > 0 Then  '如果存在该读者
        SQL = "insert into" & _
              "用户信息表(userID,userName,userType,password,competence,identificationU,addressU,telephoneU,emailU) "
        SQL = SQL & " select readerID,readerName, userType,"
        SQL = SQL & " '借书管理 : 还书管理 : 检索统计 :' as competence,identificationU,addressU,telephoneU,emailU "
        SQL = SQL & " from 用户信息表 where readerID='" & Sys_UserID & "'"
        Call ExecuteSQL(SQL, msg)
        InsertUserInfo = True
    Else
        InsertUserInfo = False
    End If
    rst.Close
End Function点击调试后问题出在     If rst.RecordCount > 0 Then    '如果存在该用户   这一句
我曾经尝试过将
Dim rst As ADODB.Recordset
改为  Dim rst As new ADODB.Recordset
但出现了  (3704)对象关闭时,不允许操作  的错误
实在不理解是什么原因
恳请各位高手指导指教

解决方案 »

  1.   

    代码写得很不规范.1,没有connection的声明,应该加一句dim Conn as new adodb.connectionDim rst As ADODB.Recordset 这句要么声明成dim rst as new adodb.connection 或者再下面加上一句Set rst = New ADODB.Recordset
     
    new代表实例化,没有加这个,所以代码出现了91的错误2,并没有看见SelectSQL这个函数,所以无法判断过程,实际,一个简单的rs.open select语句就可以了,并不需要用一个专门的函数去处理.
    3,用了中文去处理sql表名,要避免
    4,声明是dim strsql as string,但是下面却变成了sql="select ...."但出现了  (3704)对象关闭时,不允许操作  的错误 
    //这个问题就更简单了,当然由于你的selectsql这个函数并没有帖出来,所以没办法知道你自己怎么处理
    最简单的办法是在open recordset前先关闭掉例如:
       Dim rst As ADODB.Recordset
        Dim strPassword As String
        Set rst = New ADODB.Recordset
        
        '判断密码是否正确
        Sys_UserID = Trim(txtUserId.Text)
        strSQL = " select userID,password from 用户信息表 where userID='" & Sys_UserID & "'"
        
        If rst.State <> adStateClosed Then rst.Close  '加上这一句
        rst.Open strSQL, conn, adOpenStatic, adLockOptimistic