none
Feststellen, ob ODBC-Verbindung existiert

    Frage

  • Hi NG,

    wie kann ich mit VBA feststellen, ob eine ODBC-Verbindung (DNS) existiert?

    Gruß

    Andy

    Donnerstag, 21. Februar 2013 09:48

Alle Antworten

  • Hallo AndyAh

    Kannst Du Dich etwas klarer ausdrücken? Willst Du feststellen, ob eine Tabelle erfolgreich verbunden wurde oder ob eine Verbindung aufgebaut ist (uns stehen bleibt)? Oder willst Du im System auslesen, welche DNS angelegt wurden?

    Gruss
    Henry
     "AndyAh" schrieb im Newsbeitrag news:d3ac3491-fae0-4e8c-918f-86da22f32a1b@communitybridge.codeplex.com...

    wie kann ich mit VBA feststellen, ob eine ODBC-Verbindung (DNS)
    existiert?

    Donnerstag, 21. Februar 2013 10:27
  • Hallo,

    AndyAh wrote:

    wie kann ich mit VBA feststellen, ob eine ODBC-Verbindung (DNS) existiert?

    Wenn du sie ansprichst und keine Verbindung hergestellt werden kann, wird
    ein ODBC-Fehler ausgegeben. Der kann aber viele Ursachen haben. Daher
    solltest du etwas genauer beschreiben, fuer welchen Vorgang du was pruefen
    moechtest.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Sonntag, 24. Februar 2013 08:11
    Moderator
  • Hallo,

    ich habe mal aus einer Quelle, die ich leider nicht mehr weiss die folgende Funktion bekommen:

    ' Gibt eine Liste aller im System konfigurierten DSNs in einem String-Array zurück
    Public Function ListDSNEntries() As String()
        Dim ret As Long
        Dim j As Long
        Dim hEnv As Long
        Dim arrDSN() As String
        Dim strDSN As String
        Dim lDSN As Integer
        Dim strDesc As String
        Dim lDesc As Integer
        If SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv) <> 0 Then
            If SQLSetEnvAttr(hEnv, _
                             SQL_ATTR_ODBC_VERSION, _
                             SQL_OV_ODBC3, _
                             SQL_IS_INTEGER) <> 0 Then
                strDSN = Space$(SQL_MAX_DSN_LENGTH)
                strDesc = Space$(SQL_MAX_DESC_LENGTH)
                
                Do While SQLDataSources(hEnv, _
                                        SQL_FETCH_NEXT, _
                                        strDSN, _
                                        SQL_MAX_DSN_LENGTH, _
                                        lDSN, _
                                        strDesc, _
                                        SQL_MAX_DESC_LENGTH, _
                                        lDesc) = SQL_SUCCESS
                    ReDim Preserve arrDSN(j)
                    arrDSN(j) = Left(strDSN, lDSN)
                    j = j + 1
                    
                    strDSN = Space$(SQL_MAX_DSN_LENGTH)
                    strDesc = Space$(SQL_MAX_DESC_LENGTH)
                Loop
            End If
        End If
        ListDSNEntries = arrDSN
        Call SQLFreeEnv(hEnv)
    End Function

    Dazu noch die passenden Funktionen aus der odbc32.dll einbinden:

    

    Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv As Long) As Integer Declare Function SQLFreeEnv Lib "odbc32.dll" (ByVal hEnv As Long) As Integer Declare Function SQLDrivers Lib "odbc32.dll" _ (ByVal hEnv As Long, _ ByVal fDirection As Integer, _ ByVal szDriverDesc As String, _ ByVal cbDriverDescMax As Integer, _ pcbDriverDesc As Integer, _ ByVal szDriverAttr As String, _ ByVal cbDrvrAttrMax As Integer, _ pcbDrvrAttr As Integer) As Integer Declare Function SQLAllocHandle Lib "odbc32.dll" _ (ByVal HandleType As Integer, _ ByVal InputHandle As Long, _ OutputHandlePtr As Long) As Long Declare Function SQLSetEnvAttr Lib "odbc32.dll" _ (ByVal EnvironmentHandle As Long, _ ByVal dwAttribute As Long, _ ByVal ValuePtr As Long, _ ByVal StringLen As Long) As Long Declare Function SQLDataSources Lib "odbc32.dll" _ (ByVal hEnv As Long, _ ByVal fDirection As Integer, _ ByVal szDSN As String, _ ByVal cbDSNMax As Integer, _ pcbDSN As Integer, _ ByVal szDescription As String, _ ByVal cbDescriptionMax As Integer, _ pcbDescription As Integer) As Integer

    
    Private Const SQL_FETCH_NEXT As Long = 1
    Private Const SQL_SUCCESS As Long = 0
    Private Const ODBC_ADD_DSN As Long = 1
    Private Const ODBC_ADD_SYS_DSN = 4
    Private Const SQL_NO_DATA_FOUND As Long = 100
    Private Const SQL_MAX_DESC_LENGTH As Long = 128
    Private Const SQL_MAX_DSN_LENGTH As Long = 32
    Private Const SQL_MAX_MESSAGE_LENGTH As Long = 512
    Private Const SQL_NULL_HANDLE As Long = 0
    Private Const SQL_HANDLE_ENV As Long = 1
    Private Const SQL_ATTR_ODBC_VERSION As Long = 200
    Private Const SQL_OV_ODBC3 As Long = 3
    Private Const SQL_IS_INTEGER As Long = (-6)


    • Bearbeitet just.do.it Montag, 25. Februar 2013 12:08
    Montag, 25. Februar 2013 12:07