你好,请教一个问题。现在我想写一个DLL,就是希望别人直接调用这个DLL就可以访问我数据库某些表的信息,就是不希望直接来读取数据库的信息,帮帮忙

解决方案 »

  1.   

    我用自已摸索的方法。也不晓得得体不?
    Private mCnn As New ADODB.Connection
    Public Enum cnnType
        unKown
        Home
        Net
    End Enum
    Private mType As cnnType
    Private sErrorMsg As String  '返回错误信息值.Public Function GetCnn(eType As cnnType, Optional bReturn As Boolean) As ADODB.Connection
        Dim strCnn As String
        Dim sMode As String
    On Error GoTo nErr
        mType = eType
        If mCnn.State = adStateClosed Then       Select Case mType
                Case cnnType.Home
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=.;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
                Case cnnType.Net
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=CQDM-YZN\WGSQLS;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
                Case cnnType.unKown
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=.;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
                    
           End Select
           With mCnn
              .CursorLocation = adUseClient
              .ConnectionString = strCnn
              .Open
              
              
           
           End With
        End If
        Set GetCnn = mCnn
        bReturn = True
        Exit Function
    nErr:
        Select Case eType
            Case Home
                sMode = "Home"
            Case Net
                sMode = "Net"
            Case Else
                sMode = "unkown"
        End Select
        
        
        sErrorMsg = "打开连接出错 In yznWGDLL . 模式为:" & sMode & Err.Description
        
        Err.Clear
        
        bReturn = FalseEnd Function
    Private Function OpenCnn() As Boolean    Call GetCnn(mType)
        If mCnn Is Nothing Then
            OpenCnn = False
            Exit Function
        ElseIf mCnn.State = adStateClosed Then
            OpenCnn = False
        Else
            OpenCnn = True
        End If
        
            
            
    End Function
    Public Property Get getCnnType() As cnnType
            getCnnType = mType
    End PropertyPublic Function SQLNow() As Date
        Dim rst As New ADODB.Recordset
            If OpenCnn Then
                rst.Open "select  getdate()", mCnn, adOpenStatic, adLockOptimistic
                SQLNow = CDate(rst.Fields(0).Value)
            Else
                SQLNow = Now
            End If
            
            Debug.Print SQLNowEnd FunctionPublic Function GetRst(strSQL As String, Optional ByRef bRetrun As Boolean) As ADODB.Recordset
    On Error GoTo nErr
        Dim rst As New ADODB.Recordset
        If OpenCnn Then
            rst.Open strSQL, mCnn, adOpenDynamic, adLockOptimistic
            Set GetRst = rst
        End If
        bRetrun = True
        Exit Function
    nErr:
        sErrorMsg = Err.Description & " In yznWGDLL"
        bRetrun = False
        Err.Clear
    End FunctionPublic Sub CloseCnn()
        mCnn.Close
    End SubPrivate Sub Class_Terminate()
        On Error Resume Next
        If Not mCnn Is Nothing Then
            If mCnn.State = adStateOpen Then
                mCnn.Close
            End If
            Set mCnn = Nothing
        End IfEnd Sub
    Public Function CreateCommand(sCommandText As String, Optional ByRef bReturn As Boolean) As ADODB.Command
        Dim cmd As New ADODB.Command
        If OpenCnn Then
            With cmd
                Set .ActiveConnection = mCnn
                .CommandText = sCommandText
                .CommandType = adCmdStoredProc
            End With
            Set CreateCommand = cmd
            bReturn = True
        Else
            bReturn = False
        End If
        
    End FunctionPublic Function ExecuteScalar(sSQL As String, Optional ByRef bReturn As Boolean) As Variant
    On Error GoTo nErr
        Dim rst As ADODB.Recordset
        Dim b As Boolean
        Set rst = GetRst(sSQL, b)
        If b Then
            With rst
                If Not .EOF Then
                    If Not IsNull(.Fields(0).Value) Then
                        ExecuteScalar = .Fields(0).Value
                    End If
                End If
            End With
            bReturn = True
        Else
            bReturn = False
        End If
        
        Exit Function
    nErr:
        bReturn = False
        sErrorMsg = Err.Description
        Err.Clear
    End Function
    Public Sub ExecuteNonQuery(cmd As ADODB.Command, Optional ByRef bReturn As Boolean)
    On Error GoTo nErr
        cmd.Execute
        bReturn = True
        
        Exit Sub
    nErr:
        bReturn = False
        sErrorMsg = Err.Description
        Err.Clear
    End SubPublic Function getErrMSG() As String
        getErrMSG = sErrorMsg
    End Function
      

  2.   

    Select Case mType
                Case cnnType.Home
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=.;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
                Case cnnType.Net
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=CQDM-YZN\WGSQLS;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
                Case cnnType.unKown
                    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=.;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"
    没明白是什么意思啊?home,net unkown这些拿来干什么呢?
      

  3.   

    就是home本地SQL服务器, net 远程SQL服务器 unKown 就是不知道服务器,看上面写的好象也用本地服务器来代替了
      

  4.   

    strCnn = "Provider=MSDataShape.1;Persist Security Info=True;Data Source=.;User ID=sa;Password=123;Initial Catalog=WG;Data Provider=SQLOLEDB.1"这个字符串都是一样的啊,就是不管是本地还是远程都是这个字符串吗?
      

  5.   

    这个你要做个接口,可以在不同的局域网中运行你这个数据库,不过好像你做这么个dll没有什么大的用处啊 !
      

  6.   

    那我到底应该怎么写啊?就是写个DLL