Per ODBC auf Excel zugreifen

Verbindung zu einer ODBCDatenquelle aufbauen

Möchten Sie eine Verbindung zu einer ODBCDatenquelle aufbauen und benötigen Sie diese Datenquelle mehrmals, ist es sinnvoll, dazu eine Funktion zu erstellen, die die geöffnete Verbindung als OleDB-Connection-Objekt zurückgibt. Die könnte wie in Listing 1 aussehen. Die Funktion Connect1 baut eine Verbindung direkt über den ODBC-Treiber auf, die Funktion Connect2 nutzt den OleDB-Provider, der allerdings im Hintergrund ebenfalls auf den ODBC-Treiber für Excel zugreift.

Function Connect1(Optional strDatei As String = "daten.xls", _
Optional strPfad As String = "") As ADODB.Connection
Dim strVerb As String
'Baut eine Verbindung über den ODBC-Treiber auf.
If strPfad = "" Then
strPfad = getDBPfad()
End If
strVerb = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" _
& strDatei & ";DefaultDir=" & strPfad & ";Readonly=0;"
Dim objConn As ADODB.Connection
Set objConn = New ADODB.Connection
objConn.Mode = adModeReadWrite
objConn.ConnectionString = strVerb
On Error GoTo FEHLER
objConn.Open
Set Connect1 = objConn
Exit Function
FEHLER:
MsgBox Err.Number & ": " & Err.Description
Resume Next
End Function
Function Connect2(Optional strDatei As String = "daten.xls", _
Optional strPfad As String = "") As ADODB.Connection
'Baut eine Verbindung über den OLEDB-Provider für ODBC auf.
Dim strVerb As String
If strPfad = "" Then
strPfad = getDBPfad()
End If
strVerb = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
strPfad & strDatei & _
";Extended Properties=""Excel 8.0;HDR=0;IMEX=1"""
Debug.Print strVerb
Dim objConn As ADODB.Connection
Set objConn = New ADODB.Connection
objConn.ConnectionString = strVerb
objConn.Mode = adModeReadWrite
On Error GoTo FEHLER
objConn.Open
Set Connect2 = objConn
Exit Function
FEHLER:
MsgBox Err.Number & ": " & Err.Description
Resume Next
End Functio

Die beiden Funktionen unterscheiden sich im Prinzip nur in der verwendeten Verbindungszeichenfolge. Für die ODBC-Verbindung wird folgende Zeichenfolge verwendet, wobei Dateiname und Pfad über die Parameter der Funktion definiert werden:

Driver={Microsoft Excel Driver (*.xls)};DriverId=
790;Dbq=daten.xls;DefaultDir=G:\Artikel\ARTIKEL\A
ccessxcelODBC_1206\bsp\;Readonly=0;

Wichtig ist hier neben der Treiberangabe und dem Pfad und Namen der Datei vor allem die Angabe Readonly=0 am Ende. Sie bewirkt, dass die Verbindung mit Schreibrechten aufgebaut wird. Lassen Sie die Angabe weg, können Sie Daten zwar lesen, aber nicht schreiben.

Für die OleDB-Verbindung wird folgende Verbindung verwendet:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Artikel\
ARTIKEL\AccessxcelODBC_1206\bsp\daten.xls;Extended
Properties="Excel 8.0;HDR=Yes;IMEX=1"

Hier ist neben der Excel-Versionsangabe mit Properties="Excel.8.0…" vor allem die Angabe IMEX=1 wichtig. Sie bestimmt, dass in der ersten Tabellenzeile die Spaltenbeschriftungen stehen. Beide Funktionen geben die geöffnete Datenbankverbindung zurück, sollte die Verbindung nicht geöffnet werden können, wird eine Fehlermeldung angezeigt.

Möchten Sie nun über die Datenbankverbindung Daten abrufen, müssen Sie dazu eine entsprechende SELECT-Anweisung formulieren und diese ausführen, um eine RecordSet-Objekt zurückzugeben.