我用VB做了一个登录界面,但是一运行总说“对象变量或WITH变量未设置”,我并没有用到这个变量。请帮我检查以下代码有错吗?另外我想当管理员登录时所有内容都可以修改,普通用户进入时只可以操作某几个菜单,请问怎么实现?代码放在主窗体还是登录窗体?
Dim a As Integer '记录输入密码的次数
Private Sub cmdCancel_Click()
  Unload Me
End Sub
Private Sub cmdOK_click()
  UserName = ""
  Dim txtsql, msgtext As String
  Dim cnn As ADODB.Connection
  Dim RS As ADODB.Recordset
  Set cnn = New ADODB.Connection
  mysql = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source= c:\图书管理系统\libary.mdb"
  cnn.Open mysql
  txtsql = "select * from yh "
  Set RS = ExecuteSQL(txtsql, msgtext)
  If RS.EOF = False Then
   MsgBox "没有这个用户,请从新输入!", vbExclamation
   txtusername.SetFocus
   Else
    If Trim(RS.Fields(1)) = Trim(txtpassword.Text) Then
    RS.Close
    Me.Hide
    UserName = Trim(txtusername.Text)
    txtusername.AddItem RS.Fields(1)
    End If
  End If
      a = a + 1
      If a = 3 Then
          Unload Me
    
   End If
End Sub

解决方案 »

  1.   


    set RS = NEW ADODB.recordset
      

  2.   

    SET RS =NEW ADODB.RECORDSET
    把代码还是放到主窗体的LOAD事件中吧!
     
      

  3.   

    没有引用ADO,或没有SET RS =NEW ADODB.RECORDSET
      

  4.   

    不是因为SET RS =NEW ADODB.RECORDSET 的原因~应该是没有引用ADO的原因吧?不知道,你这个例子是直接拿过来用的,还是你自己做的,如果自己做的话,你肯定引用ADO了,但如果是拿别人的例子用的话,我想应该是没有应用ADO才对或者Set RS = ExecuteSQL(txtsql, msgtext)里面的
    ExecuteSQL(txtsql, msgtext) 里面可能是错误的~
      

  5.   

    ExecuteSQL(txtsql, msgtext)里面的函数应该是这样的Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '定义一个数据集执行函数
       'Dim cnn As ADODB.Connection 定义数据连接
       Dim rst As ADODB.Recordset  '定义数据集
       Dim sTokens() As String '定义一个存放SQL语句段落的数组
       
       On Error GoTo ExecuteSQL_Error  '错误处理
       
       sTokens = Split(SQL)  '把SQL语句以“ ”隔开语句分别存到数组中
       Set cnn = New ADODB.Connection
       cnn.Open ConnectString
       
       '判断SQL语句的第一个单词(语句)是否为INSERT,DELETE,UPDATE
       
       If InStr("INSERT,DELETE,UPDATE", UCase(sTokens(0))) Then
          cnn.Execute SQL
          MsgString = UCase(sTokens(0)) & " 执行成功"
       Else
          Set rst = New ADODB.Recordset
          rst.Open Trim(SQL), cnn, adOpenKeyset, adLockOptimistic
          Set ExecuteSQL = rst
          MsgString = "查询到" & rst.RecordCount & " 条记录 "
       End If
       
    ExecuteSQL_Exit:  '执行后退出
       Set rst = Nothing
       Set cnn = Nothing
       rst.Close
       cnn.Close
       Exit Function
       
    ExecuteSQL_Error:  '错误处理
       MsgString = "查询错误: " & Err.Description
       GoTo ExecuteSQL_Exit
    End Function以上是改动后的结果,因为你的数据库是一直打开的,所以 Dim cnn As ADODB.Connection '定义数据连接 可以不要~直接写在SUB MAIN 里面就可以了~