Option ExplicitPrivate Con As ADODB.Connection
Private DataBaseconfig As clsDataBaseConfigPrivate Declare Function GetPrivateProfileString _
                Lib "kernel32" Alias "GetPrivateProfileStringA" _
                (ByVal lpApplicationName As String, _
                ByVal lpKeyName As Any, _
                ByVal lpDefault As String, _
                ByVal lpReturnedString As String, _
                ByVal nSize As Long, _
                ByVal lpFileName As String) As LongPrivate Sub ConnectToServer(DataBaseconfig As clsDataBaseConfig)
On Error GoTo errCon
    If Con.State = 1 Then
        Con.Close
    End If
    Con.ConnectionString = DataBaseconfig.GetConString(DataBaseconfig)
    Con.CursorLocation = adUseClient
    Con.ConnectionTimeout = 50
    Con.Open
    Exit Sub
errCon:
    Err.Raise 512 + 1, , "连接失败!"
End Sub
Public Function GetRecordset(strSql As Variant, Rst As Variant) As Collection
On Error GoTo errRst
    Dim rstCollection As New Collection
    Dim i As Integer
    If Rst.State = 1 Then
        Rst.Close
    End If
    
    Rst.Source = strSql
    Rst.ActiveConnection = Con
    Rst.LockType = adLockOptimistic
    Rst.CursorType = adOpenKeyset
    Rst.Open
    
    If Not Rst.BOF And Not Rst.EOF Then
        Rst.MoveFirst
        Do While Not Rst.EOF
            Dim smallColl As New Collection
            For i = 0 To Rst.Fields.Count - 1
                smallColl.Add Rst.Fields(i).Value
            Next
            rstCollection.Add smallColl
            Set smallColl = Nothing
            Rst.MoveNext
        Loop
        Rst.MoveFirst
    End If
    
    Set GetRecordset = rstCollection
    Exit Function
errRst:
    Err.Raise 512 + 2, , "获取记录集失败!"
End FunctionPrivate Sub Class_Initialize()
    Dim str As String * 100
    Dim lngReturn As Long
    Set Con = New ADODB.Connection
    Set DataBaseconfig = New clsDataBaseConfig
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "ServerName", ".", str, 100, App.Path & "\DataSet.ini")
    DataBaseconfig.ServerName = Left(str, lngReturn)
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "DataBaseType", "1", str, 100, App.Path & "\DataSet.ini")
    If Left(str, lngReturn) = 1 Then
        DataBaseconfig.DataBaseType = SqlServer
    Else
        DataBaseconfig.DataBaseType = Access
    End If
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "DataBaseName", "", str, 100, App.Path & "\DataSet.ini")
    DataBaseconfig.DatabaseName = Left(str, lngReturn)
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "ValidateType", "1", str, 100, App.Path & "\DataSet.ini")
    If Left(str, lngReturn) = 1 Then
        DataBaseconfig.ValidateType = SQl
    Else
        DataBaseconfig.ValidateType = Winnt
    End If
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "UserName", "", str, 100, App.Path & "\DataSet.ini")
    DataBaseconfig.UserName = Left(str, lngReturn)
    
    lngReturn = GetPrivateProfileString("DataBaseConfig", "UserPwd", "", str, 100, App.Path & "\DataSet.ini")
    DataBaseconfig.UserPwd = Left(str, lngReturn)
    
    Call ConnectToServer(DataBaseconfig)
    Debug.Print Con.State
End Sub
Private Sub Class_Terminate()
    If Con.State = 1 Then
        Con.Close
    End If
    Set Con = Nothing
    Set DataBaseconfig = Nothing
End Sub

解决方案 »

  1.   

    Option Explicit
    Public Enum DataBaseTypeEnm
        Access = 0
        SqlServer = 1
    End EnumPublic Enum ValidateTypeEnm
        Winnt = 0
        SQl = 1
    End Enum'保持属性值的局部变量
    Private mvarServerName As String '局部复制
    Private mvarDataBaseType As DataBaseTypeEnm '局部复制
    Private mvarDataBaseName As String '局部复制
    Private mvarUserName As String '局部复制
    Private mvarUserPwd As String '局部复制
    Private mvarValidateType As ValidateTypeEnm '局部复制Private Sub Class_Initialize()
        mvarServerName = "."
        mvarDataBaseType = SqlServer
        mvarDataBaseName = ""
        mvarUserName = ""
        mvarUserPwd = ""
        mvarValidateType = SQl
    End Sub
    Public Property Let ValidateType(ByVal vData As ValidateTypeEnm)
        mvarValidateType = vData
    End Property
    Public Property Get ValidateType() As ValidateTypeEnm
        ValidateType = mvarValidateType
    End PropertyPublic Property Let UserPwd(ByVal vData As String)
        mvarUserPwd = vData
    End Property
    Public Property Get UserPwd() As String
        UserPwd = mvarUserPwd
    End PropertyPublic Property Let UserName(ByVal vData As String)
        mvarUserName = vData
    End Property
    Public Property Get UserName() As String
        UserName = mvarUserName
    End PropertyPublic Property Let DataBaseName(ByVal vData As String)
        mvarDataBaseName = vData
    End Property
    Public Property Get DataBaseName() As String
        DataBaseName = mvarDataBaseName
    End PropertyPublic Property Let DataBaseType(ByVal vData As DataBaseTypeEnm)
        mvarDataBaseType = vData
    End Property
    Public Property Get DataBaseType() As DataBaseTypeEnm
        DataBaseType = mvarDataBaseType
    End PropertyPublic Property Let ServerName(ByVal vData As String)
        mvarServerName = vData
    End Property
    Public Property Get ServerName() As String
        ServerName = mvarServerName
    End Property
    Public Function GetConString(DataBaseConfig As clsDataBaseConfig) As String
        Dim strCon As String
        If DataBaseConfig.DataBaseType = Access Then
        
        Else
            If DataBaseConfig.ValidateType = SQl Then
                strCon = "Provider=SQLOLEDB.1;Password=" & DataBaseConfig.UserPwd & ";Persist Security Info=True;User ID=" & DataBaseConfig.UserName & ";Initial Catalog=" & DataBaseConfig.DataBaseName & ";Data Source=" & DataBaseConfig.ServerName
            Else
                
            End If
        End If
        GetConString = strCon
    End Function