编程论坛's Archiver

ly21a 发表于 2007-9-18 09:36

运行时出现了“对象关闭时不允许操作”实时错误3704,请问大家怎么改呢?

<P>Option Explicit‘这是公共模块</P>
<P>Public adocon As ADODB.Connection<BR>Public adminp As Boolean<BR>Public readp As Boolean<BR>Public username As String</P>
<P>Public Function executesql(ByVal sql As String) As ADODB.Recordset<BR>Dim rst As ADODB.Recordset<BR>Set adocon = New ADODB.Connection<BR>adocon.CursorLocation = adUseClient<BR>adocon.ConnectionString = Connstring<BR>adocon.Open<BR>Dim stokens() As String<BR>On Error GoTo executesql_error<BR>stokens = Split(sql, " ")<BR>If InStr("inser,delete,update", UCase(stokens(0))) Then<BR>   adocon.Execute sql<BR>   Else<BR>   Set rst = New ADODB.Recordset<BR>   rst.Open Trim(sql), adocon, adOpenKeyset, adLockOptimistic<BR>   Set executesql = rst<BR>   End If<BR>executesql_exit:<BR>   Set rst = Nothing<BR>   Set adocon = Nothing<BR>   Exit Function<BR>executesql_error:<BR>   Resume executesql_exit<BR>   <BR>End Function</P>
<P>Public Function Connstring() As String</P>
<P>Connstring = "provider = microsoft.Jet.OLEDB.4.0;Data source =" &amp; App.Path &amp; "\123.mdb "<BR>End Function<BR>Public Function executeqx() As Boolean<BR>Dim sql As String<BR>Dim rst As ADODB.Recordset<BR>Set adocon = New ADODB.Connection<BR>adocon.ConnectionString = Connstring<BR>adocon.Open<BR> Set rst = New ADODB.Recordset<BR> sql = "select * from use where username='" &amp; username &amp; "'"<BR> rst.Open Trim(sql), adocon, adOpenKeyset, adLockOptimistic<BR> If rst.EOF = True Then<BR>  MsgBox "非法用户", vbExclamation + vbOKOnly, "警告"<BR>  executeqx = Null<BR>  Exit Function<BR>  End If<BR>  If rst.Fields("admin") Then<BR>  executeqx = True<BR>  Exit Function<BR>  ElseIf rst.Fields("readonly") Then<BR>  executeqx = False<BR>  End If<BR>  rst.Close<BR>  On Error GoTo executesql_error<BR>executesql_exit:<BR>  Set rst = Nothing<BR>  Set adocon = Nothing<BR>  Exit Function<BR>executesql_error:<BR>  Resume exectuesql_exit<BR>  <BR>End Function</P>
<P><BR>’这是登录窗体代码<BR>Private Sub Command1_Click()<BR>Dim txtsql As String<BR>Dim mrc As New ADODB.Recordset<BR>  txtsql = "select username from use where username=" &amp; Trim(Text1.Text) &amp; ""<BR>  Set mrc = executesql(txtsql)<BR>  If mrc.EOF = True Then<BR>    MsgBox "用户名错误!", vbExclamation + vbOKOnly, "警告"<BR>    Text1.SetFocus<BR>    Text1.SelStart = 0<BR>    Text1.SelLength = Len(Text1.Text)<BR>    Exit Sub<BR>   End If<BR>  username = mrc.Fields(0)<BR>  txtsql = "select username from use where password=" &amp; Trim(Text2.Text) &amp; ""<BR>  Set mrc = executesql(txtsql)<BR>  If mrc.EOF = True Then<BR>  MsgBox "密码错误!", vbExclamation + vbOKOnly, "警告"<BR>  Text2.SetFocus<BR>  Text2.SelStart = 0<BR>  Text2.SelLength = Len(Text1.Text)<BR>  Exit Sub<BR>  End If<BR>  If executeqx Then<BR>  adminp = True<BR>  Else<BR>  readp = True<BR>  End If<BR>  <BR>End Sub</P>
<P><BR>Private Sub Command2_Click()<BR>end<BR>End Sub<BR>运行时出现了“对象关闭时不允许操作”实时错误3704,请问大家怎么改呢?<BR></P>

西风独自凉 发表于 2007-9-18 10:01

這麼多代碼,也不標明運行到哪 一行出的這個錯。。。誰有時間去幫你看。。。<BR><BR>連接出了問題

purana 发表于 2007-9-18 10:22

Set mrc = executesql(txtsql)<br>我估计是这个错误.<br>这个在网上已经看过几千万次了.<br>

junxi1 发表于 2007-9-18 18:01

<P>说明recordset没有打开,问题在打开表的那条语句中。<BR></P>

ly21a 发表于 2007-9-20 20:53

就我的这个程序,怎么改呢?

寻找 发表于 2007-9-20 22:31

<P>不标明那里出错,这么长的代码很难一一去看~</P>

zldgj 发表于 2008-6-17 01:53

我的也是这个问题啊位高手给指导一下呀





Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long


Public OK As Boolean
'记录确定次数
Dim miCount As Integer
Private Sub Form_Load()
    Dim sBuffer As String
    Dim lSize As Long


    sBuffer = Space$(255)
    lSize = Len(sBuffer)
    Call GetUserName(sBuffer, lSize)
    If lSize > 0 Then
        txtUserName.Text = ""
   
    Else
        txtUserName.Text = vbNullString
    End If
   

    OK = False
    miCount = 0
End Sub



Private Sub cmdCancel_Click()
    OK = False
    Me.Hide
End Sub


Private Sub cmdOK_Click()
    Dim txtSQL As String
    Dim mrc As ADODB.Recordset
    Dim MsgText As String
    'ToDo: create test for correct password
    'check for correct password
   
    UserName = ""
    If Trim(txtUserName.Text = "") Then
        MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
        txtUserName.SetFocus
    Else
        txtSQL = "select * from user_Info where user_ID = '" & txtUserName.Text & "'"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        [color=Red]If mrc.EOF = True Then[/color]
            MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
            txtUserName.SetFocus
        Else
            If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then
                OK = True
                mrc.Close
                Me.Hide
                UserName = Trim(txtUserName.Text)
            Else
                MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
                txtPassword.SetFocus
                txtPassword.Text = ""
            End If
        End If
    End If
   
    miCount = miCount + 1
    If miCount = 3 Then
        Me.Hide
    End If
    Exit Sub
End Sub

jxyga111 发表于 2008-6-17 09:03

那是没有资料

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.