Hallo!
ich moechte mit Hilfe eines kleines VB-Prgramms auf
ODBC-Datenquelle zugreifen koennen.
Dazu moechte ich vorher alle System-DSN’s in einer Listbox zur
Auswahl anbieten.
Kann mir jemand sagen, wie ich an die DSN-Namen ran komme?
Wenn Du VB6 Prof. hast, kannst Du mit Formular | Hinzufuegen
eine „ODBC-Anmeldung“ auswaehlen. Darin sind alle notwendigen
Deklarationen und Funktionen enthalten.
Ansonsten hier das wichtigste aus dem Modul:
Private Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As Integer
Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&:wink:
Const SQL\_SUCCESS As Long = 0
Const SQL\_FETCH\_NEXT As Long = 1
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
cboDSNList.AddItem "(None)"
'DSNs abrufen
If SQLAllocEnv(lHenv) -1 Then
Do Until i SQL\_SUCCESS
sDSNItem = Space(1024)
sDRVItem = Space(1024)
i = SQLDataSources(lHenv, SQL\_FETCH\_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen)
sDSN = VBA.Left(sDSNItem, iDSNLen)
sDRV = VBA.Left(sDRVItem, iDRVLen)
If sDSN Space(iDSNLen) Then
cboDSNList.AddItem sDSN
cboDrivers.AddItem sDRV
End If
Loop
End If
'Duplikate entfernen
If cboDSNList.ListCount \> 0 Then
With cboDrivers
If .ListCount \> 1 Then
i = 0
While i