Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set con = New ADODB.Connection
    strCon = "driver=mysql odbc 3.51 driver;" & _
                "server=server;" & _
                "database=scms_erds;" & _
                "port=3306;" & _
                "uid=erdsuser;" & _
                "pwd=erds"
    con.Open strCon    Set rs = New ADODB.Recordset
    sqllogin = "select * from operatorinfo where adminname='" & opername & "'" & " and adminpassword='" & operpass & "'"
    rs.Open sqllogin, con, adOpenKeyset, adLockOptimistic
    If Not rs.EOF Then
    rs.Close
    Set rs = Nothing
这样是可以的,不能要操作时总连接啊是在模块里处理吗(连接作为一个全局)

解决方案 »

  1.   

    可以封装成类,在类对象初始化时(Initialize事件)Connection连接,在类对象析构时(即Terminate事件)时断开连接。这两个事件是自动触发的。
      

  2.   

    首先要引用ado
    在窗体事件里这样操作
        Dim rs As ADODB.Recordset
        '添加记录
        strsql="select * from table"
        set rs=executesql(strsql,msgtext)
        rs.addnew
           rs!字段1=text1.text
           rs!字段2=text2.text
           ........
        rs.update
        rs.close
        set rs=nothing
        '修改记录
        strsql="select * from table where id=1"
        set rs=executesql(strsql,msgtext)
           rs!字段1=text1.text
           rs!字段2=text2.text
           ........
        rs.update
        rs.close
        set rs=nothing将下面的代码放到vb的类模块中
    Dim msgtext As String
    Dim mrc As ADODB.RecordsetPublic 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
        'Dim SQL As String
        On Error GoTo ExecuteSQL_Error
        sTokens = Split(sql)
        Set cnn = New ADODB.Connection
        cnn.Open ConnectString
        If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
           cnn.Execute sql
           MsgString = sTokens(0) & "query successful"
        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
        Exit Function
        Set cnn = Nothing
    ExecuteSQL_Error:
        MsgString = "查询错误:" & Err.Description
        Resume ExecuteSQL_Exit
    End FunctionPublic Function ConnectString() As String
        ConnectString ="driver=mysql odbc 3.51 driver;" & _
                    "server=server;" & _
                    "database=scms_erds;" & _
                    "port=3306;" & _
                    "uid=erdsuser;" & _
                    "pwd=erds"
     
        
    End Function
      

  3.   

    '类模块
    Dim con As New ADODB.Connection
    Public Function getConn() As ADODB.Connection
        con.CursorLocation = adUseClient
        con.Open "driver=mysql odbc 3.51 driver;" & _
                    "server=server;" & _
                    "database=scms_erds;" & _
                    "port=3306;" & _
                    "uid=erdsuser;" & _
                    "pwd=erds"
        Set getcon = con
    End FunctionPrivate Sub Class_Terminate()
        con.Close
        Set con = Nothing
    End Sub'窗体
    Private Sub Command1_Click()
        Dim clsConn As New clsConntion
        Dim con As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Set con = clsConn.getConn
        
        sqllogin = "select * from operatorinfo where adminname='" & opername & "'" & " and adminpassword='" & operpass & "'"
        rs.Open sqllogin, con, adOpenKeyset, adLockOptimistic
        If Not rs.EOF Then
        rs.Close
        Set rs = Nothing
        Set clsConn = Nothing
    End Sub
      

  4.   

    faysky2() //你写的在窗体中
        If Not rs.EOF Then
        rs.Close
        Set rs = Nothing
        Set clsConn = Nothing//为什么不让con 也nothing 我觉得应该加上set con=nothing,
     cuilei197979(风)  你在
    Function ExecuteSQL()中关闭rst,conn 程序不报错么?
      

  5.   

    和我引用ADO2.0无关吧,现在有ado2.6了
      

  6.   

    在模块中定义一个全局的链接!
    用到的时候定义一个局部的记录集就行.
    退出半关闭连接.=================
    学习技巧与源码下载站:
    http://www.j2soft.cn/
    http://j2soft.008.net/
      

  7.   

    CUIZM:还是就用模块,而不是类模块
      

  8.   

    仿照 faysky2定义一个类
    '类模块
    Dim con As New ADODB.Connection
    Public Function getConn() As ADODB.Connection
        con.CursorLocation = adUseClient
        con.Open "driver=mysql odbc 3.51 driver;" & _
                    "server=server;" & _
                    "database=scms_erds;" & _
                    "port=3306;" & _
                    "uid=erdsuser;" & _
                    "pwd=erds"
        Set getcon = con
    End FunctionPrivate Sub Class_Terminate()
        con.Close
        Set con = Nothing
    End Sub
    然后在模块中定义这个类的一个实例,弄成全局变量  用的时候再定义一个局部的记录集就行.
    程序退出的时候关闭这个全局的类  不知道楼上说的是否是这个意思.
      

  9.   

    可以的话,能否打包一下发给我呢
    我的EMAIL:[email protected]