Rubrik: Datenbanken · Sonstiges | VB-Versionen: VB6 | 19.05.08 |
Alle vorhandenen System-/Benutzer-DSN Einträge ermitteln Dieses Beispiel zeigt, wie sich alle im System installierten System-DSN oder auch Benutzer-DSN Einträge ermitteln lassen. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.963 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Werfen Sie einmal einen Blick auf die im System eingerichteten Datenverbindungen, die als ODBC-Datenquelle in der Systemsteuerung eingerichtet sind.
Unser heutiger Tipp zeigt, wie man genau diese Auflistung direkt aus der eigenen Anwendung heraus auslesen kann.
Fügen Sie nachfolgende Code in ein Modul ein:
Option Explicit ' benötigte Deklarationen Private Declare Function SQLAllocEnv Lib "odbc32.dll" ( _ ByRef env As Long) As Integer Private 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 Declare Function SQLFreeEnv Lib "odbc32.dll" ( _ ByVal henv As Long) As Integer Private Const SQL_SUCCESS = 0 Private Const SQL_FETCH_FIRST_USER = 31 Private Const SQL_FETCH_FIRST_SYSTEM = 32 Private Const SQL_FETCH_NEXT = 1 ' Struktur für die Rückgabe der DSN-Einträge Public Type tDSN DSNName As String Description As String End Type ' Aufzählung Public Enum eDSN SYSTEMDSN = 0 USERDSN = 1 End Enum
' alle vorhandenen System-/Benutzer-DSN Einträge ermitteln Public Function GetAllSystemDSN(ByRef DSN() As tDSN, _ Optional ByVal DSNType As eDSN = SYSTEMDSN) As Long Dim nResult As Integer Dim nHandle As Long Dim sDSN As String * 1024 Dim sDescr As String * 1024 Dim nLenDSN As Integer Dim nDescrLen As Integer Dim nCount As Long nCount = 0 ' Handle ermitteln nResult = SQLAllocEnv(nHandle) If nResult <> -1 Then If DSNType = SYSTEMDSN Then ' ersten System DSN Eintrag ermitteln nResult = SQLDataSources(nHandle, SQL_FETCH_FIRST_SYSTEM, _ sDSN, Len(sDSN), nLenDSN, sDescr, Len(sDescr), nDescrLen) Else ' ersten Benutzer DSN Eintrag ermitteln nResult = SQLDataSources(nHandle, SQL_FETCH_FIRST_USER, _ sDSN, Len(sDSN), nLenDSN, sDescr, Len(sDescr), nDescrLen) End If If nResult = SQL_SUCCESS Then ' Rückgabe in tDSN-Struktur schreiben nCount = nCount + 1 ReDim Preserve DSN(nCount - 1) With DSN(nCount - 1) .DSNName = Left$(sDSN, nLenDSN) .Description = Left$(sDescr, nDescrLen) End With ' jetzt nach weiteren Einträgen suchen Do Until nResult <> SQL_SUCCESS nResult = SQLDataSources(nHandle, SQL_FETCH_NEXT, _ sDSN, Len(sDSN), nLenDSN, sDescr, Len(sDescr), nDescrLen) If nResult = SQL_SUCCESS Then ' Rückgabewert wieder in tDSN-Struktur speichern nCount = nCount + 1 ReDim Preserve DSN(nCount - 1) With DSN(nCount - 1) .DSNName = Left$(sDSN, nLenDSN) .Description = Left$(sDescr, nDescrLen) End With End If Loop End If End If ' Ressourcen wieder freigeben SQLFreeEnv nHandle ' nCount = Anzahl gefundener Einträge GetAllSystemDSN = nCount End Function
Aufrufbeispiel:
Um alle vorhandenen System-DSN Einträge in einer ComboBox anzuzeigen, folgenden Code verwenden:
Dim DSN() As tDSN Dim nCount As Long nCount = GetAllSystemDSN(DSN()) If nCount > 0 Then Dim i As Long For i = 0 To nCount - 1 Combo1.AddItem DSN(i).DSNName Next i End If
Sollen hingegen die Benutzer-DSN Einträge angezeigt werden, einfach den Parameter USERDSN angeben:
nCount = GetAllSystemDSN(DSN(), USERDSN)