如何读出ODBC数据源所有的DSN名称?

解决方案 »

  1.   

    Public Declare Function SQLDataSources Lib "ODBC32.DLL" _
     (ByVal henv As Long, ByVal fDirection As Integer, ByVal szDSN As String, _
     ByVal cbDSNMax As Integer, ByRef pcbDSN As Integer, ByVal szDescription As String, _
     ByVal cbDescriptionMax As Integer, ByRef pcbDescription As Integer) As Long
    Public Declare Function SQLAllocEnv Lib "ODBC32.DLL" (env As Long) As Integer
    public Sub GetDSNsAndDrivers()
        Dim i As Integer
        Dim sDSNItem As String * 1024
        Dim sDRVItem As String * 1024
        Dim sDSN As String
        Dim sDRV As String
        Dim iDSNLen As Integer
        Dim iDRVLen As Integer
        Dim lHenv As Long         'Zugriffsnummer zur Umgebung    On Error Resume Next
        cmbDataName.AddItem "(---)"
        cmbDataDriver.AddItem "(---)"
        'DSNs abrufen
        If SQLAllocEnv(lHenv) <> -1 Then
            Do Until i <> SQL_SUCCESS
                sDSNItem = Space(1024)
                sDRVItem = Space(1024)
                ' Aufruf der API Funktion zur Ausgabe der n?chsten ODBC
    ' Verbindung
                i = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, _
                iDSNLen, sDRVItem, 1024, iDRVLen)
                sDSN = Left(sDSNItem, iDSNLen)
                sDRV = Left(sDRVItem, iDRVLen)
                    
                If sDSN <> Space(iDSNLen) Then
                    cmbDataDriver.AddItem sDRV
                    cmbDataName.AddItem sDSN
                End If
            Loop
        End If
      
      
    End Sub