数据库是SQL 2000,报错说对象关闭时,不允许操作会急死人的!!
Public fMainForm As frmMain
Public fLogin As frmloginPublic Function ExecuteSQL(SQLstr As String) As ADODB.Recordset
Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim msg As String
On Error GoTo executesql_error
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa,Initial Catalog=数据准备区;Data Source=AKEN"
Set rst = New ADODB.Recordset
rst.Open Trim$(SQLstr), cn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
executesql_exit:
Set rst = Nothing
Set cn = Nothing
Exit Function
executesql_error:
msg = "错误原因:" & Err.Description
Resume executesql_exit
End Function
Private Sub cmdOk_Click()
   Dim cn As ADODB.Connection
   Dim SQLstr As String
   Dim rs As New ADODB.Recordset
   If txtUsername.Text = "" Or txtPassword.Text = "" Then
   MsgBox "必须输入操作员编号和口令!!!", vbOKOnly + vbExclamation, "注意"
   txtUsername.SetFocus
   Else
   SQLstr = "select * from USER where operatorNo='" & Trim(txtUsername.Text) & "'"
   Set rs = ExecuteSQL(SQLstr)
    If rs.EOF = True Then
   MsgBox "操作员编码输入错误!!!", vbOKOnly + vbExclamation, "注意"
   txtUsername.Text = ""
   txtPassword.Text = ""
   txtUsername.SetFocus
   Else
   If Trim(rs.Fields(1)) = Trim(txtPassword.Text) Then
   Load fMainForm
   fMainForm.Show
   Unload fLogin
   rs.Close
   Set rs = Nothing
   Else
            MsgBox "密码输入错误!!!", vbOKOnly + vbExclamation, "注意"
            txtPassword.Text = ""
            txtPassword.SetFocus
         End If
      End If
   End If
   
   
   
End Sub

解决方案 »

  1.   

    SQLstr = "select * from USER where operatorNo='" & Trim(txtUsername.Text) & "'"
       Set rs = ExecuteSQL(SQLstr)
    改成:
    SQLstr = "select * from USER where operatorNo='" & Trim(txtUsername.Text) & "'"
    if rs.state=adstateopen then rs.close
    rs.open sqlstr,cn,adopenkeyset,adlockreadonly
    试试
      

  2.   

    连接数据库放在函数里就可以了,打开记录集可以放在cmdOk_click里的,这样打开、关闭记录集就不会搞错了
      

  3.   

    cmdOk_Click()里,你的rs还没有打开,就执行Set rs = ExecuteSQL(SQLstr),当然会出错!
      

  4.   

    你的记录集打开时连接对象(CN)打开了吗???
    看你的cmdOk_Click()事件中没有打开CN
      

  5.   

    我看了,好像打不开,rs.eof的值是true
      

  6.   

    我把函数写到cmd_click()里面,还是打不开,是不是数据库的设置出错了,数据库名是数据准备区,表明是USER,下面是我加到里面的代码,还是不行,说USER附近出错Private Sub CmdOk_Click()
       Dim cn As ADODB.Connection
       Dim SQLstr As String
       Dim cnstr As String
       Dim rs As ADODB.Recordset
       If txtUsername.Text = "" Or txtPassword.Text = "" Then
       MsgBox "必须输入操作员编号和口令!!!", vbOKOnly + vbExclamation, "注意"
       txtUsername.SetFocus
       Else
       SQLstr = "select * from USER where operatorNo='" & Trim(txtUsername.Text) & "'"
       cnstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=数据准备区;Data Source=AKEN"
       Set cn = New ADODB.Connection
       cn.Open cnstr
       Set rs = New ADODB.Recordset
       rs.Open SQLstr, cn, adOpenKeyset, adLockOptimistic
        If rs.EOF = True Then
       MsgBox "操作员编码输入错误!!!", vbOKOnly + vbExclamation, "注意"
       txtUsername.Text = ""
       txtPassword.Text = ""
       txtUsername.SetFocus
       Else
       If Trim(rs.Fields(1)) = Trim(txtPassword.Text) Then
       Load fMainForm
       fMainForm.Show
       Unload fLogin
       rs.Close
       Set rs = Nothing
       Else
                MsgBox "密码输入错误!!!", vbOKOnly + vbExclamation, "注意"
                txtPassword.Text = ""
                txtPassword.SetFocus
             End If
          End If
       End If
       
       
       
    End Sub
      

  7.   

    在formload的时候就打开rs啊
      

  8.   

    The program is no problem.Your database set is wrong.