In Excel per VBA Access-DB auslesen

Liebe/-r Experte/-in,
Hallo zusammen,
ich nutze folgendes Script in Excel (2003), um Daten aus einer Access-DB (2003) auszulesen und in Excel in eine Zelle zu schreiben:

Sub ADO_Recordset_komplett_uebernehmen()

Application.ScreenUpdating = False
Dim con As ADODB.Connection
Dim datei As String
Dim fld As Field
Dim rs As ADODB.Recordset
Dim spalte As Long
Dim accTab As String
Dim ws As Worksheet
Dim zeile As Long
Dim s As String

‚Den Ausgangswert für die Suche in die Variable s schreiben
s = Range(„D2“).Value
’ (0) SQL-String
‚accTab = "SELECT DOMAIN FROM x86Intel WHERE INVENTARNR = " & "‘" & s & "‘"
accTab = "SELECT DOMAIN FROM x86Intel WHERE INVENTARNR = " & s
’ (1) Verbindung zur Datenbank herstellen

datei = „F:\Daten\Access\LSM_NEU.mdb“

Set con = New ADODB.Connection
con.Open ConnectionString:= _
„Provider=Microsoft.Jet.OLEDB.4.0;“ & _
„Data Source=“ & datei

’ (2) Recordset erstellen
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open Source:=accTab, _
ActiveConnection:=con, _
CursorType:=adOpenKeyset, _
LockType:=adLockReadOnly, _
Options:=adCmdTableDirect

’ (3a) Tabellenblatt selektieren
Set ws = ThisWorkbook.Worksheets(„Tabelle1“)

’ (3b) Stelle angeben, an die der neue Wert in Excel übergeben werden soll
ws.Range(„D20“).CopyFromRecordset _
Data:=rs, _
MaxRows:=ws.Rows.Count - 1, _
MaxColumns:=ws.Columns.Count

’ (4) Recordset und Verbindung schließen

rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
Application.ScreenUpdating = True
End Sub

Dieses makro funktioniert einwandfrei, sobald die Access-DB „eigenständig“ ist, also eigene Tabellen besitzt. Sobald aber eine Tabelle eine Verknüpfung ist (in meinem Fall eine Verknüpfung zu einer Oracle-DB) funktioniert das Makro nicht mehr und ich erhalte an der Stelle:

’ (2) Recordset erstellen
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open Source:=accTab, _
ActiveConnection:=con, _
CursorType:=adOpenKeyset, _
LockType:=adLockReadOnly, _
Options:=adCmdTableDirect

eine Fehlermeldung:
Laufzeitfehler
Die Methode ‚Open‘ für das Objekt ‚_Recordser‘ ist fehlgeschlagen.

Hat jemand eine Ahnung warum das so ist?
Ich habe keinerlei Erklärung dafür.
Für eine Hilfe wäre ich sehr dankbar.
Gruß,
Jochen

Moin, moin!

Mit Oracle habe ich wenig Erfahrungen.
Ich würde aber versuchen, die Tabelle direkt aus der Oracle-Datenbank einzubinden.
Wie der connectionstring dann aussieht müsste man in den Eigenschaften der eingebundenen Tabelle in der Access-Db sehen können(Tabelle in der Entwurfsansicht öffnen).
Weiterhin könnte ich mir vorstellen, dass ein paar der Parameter, die Du da einstellst (CursorType, Locktype, Options) für eine Oracle-Tabelle nicht funktionieren. Vielleicht einfach mal weglassen.

Viel Glück!

Ingo

Sorry, tut mir Leid, mit Access kenne ich mich nicht aus.
Viel Erfolg
Rainer

hi,
hatte mal ein ähnliches problem. und auch keine wirkliche erklärung gefunden.
vermutung: die abfrage ist leer bis sie geöffnet wird und wird erst beim öffnen mit den oracle daten gefüllt–> und daraus folgt eine race-condition zwischen vba und access wobei vba immer siegt… :smile:
die oracle konnt ich damals nicht direkt anzapfen -->

workaround war: Tabellenwerstellungsabfrage im access und die dann im xls auswerten…

Ich lgaube es liegt am Parameter
Options:=adCmdTableDirect bei rs.Open

Bei eingebunden Tabellen passt das nicht,
ich habe den Richtigen Parameter gerade nicht im Kopf.
Versuche mal adCmdTable oder dbOpenSnapshot

Alois

Hallo Jochen,

eine genaue Begründung kann ich dir leider nicht liefern, ich habe leider keine Test-DB um dein Problem nachzuvollziehen, ich glaube aber es liegt an dem verwendeten Datenbankmodel, es gibt in Access 2 Datenmodel ADO und DAO, wo genau ie Unterschiede liegen, kann ich dir nicht sagen, aber ich vermute, das dein ADO-Recordset nicht mit den Oracle-Daten klar kommt.

Es wäre sicher eine weitere Recherche und einen Versuch wert…

Gruß,
Vandroy

Hallo Jochen,
eine Lösung kenne ich nicht.
Ich pflege das Problem zu umgehen.
Du kannst in den Systemtabellen zu deiner Access-DB feststellen, ob du eine Tabelle aus der DB oder einer Verknüpften DB hast. Und danach setzt Du den Connection-String für die ADODB-Verbindung zusammen.
Wie das konkret geht, kann ich Dir jetzt nicht sagen.
Es gibt eine Tabelle MSysObjects, die enthält die entsprechenden Informationen, palte Connect oder Database. Muss evtl. erst auf sichtbar gestellt werden.

Gruß
Vincenz

Servus Jochen,

mit dem CursorTyp adOpenKeyset offnest Du Deine Access-Tabelle zur Bearbeitung. Dieser Zugriff könnte jedoch Deine Oracle-DB sperren und damit schlägt Dein OPEN fehl.
Zwei Gedanken hätte ich als Lösungsansatz: Erstens, versuch doch mal den CursorTyp auf Static zu setzen und zweitens, versuche doch via ADO direkt auf Deine ORACLE-DB zuzugreifen. Als Provider könntest Du evtl. „OraOLEDB.Oracle.1“ verwenden.

LG Gerd

Hi,
ohne genau nachzuforschen, solltest du den Connectionstring der OracelDB verwenden und nicht indirekt versuchen zuzugreifen.

Es geht glaub ich nicht.
Gruß Erwin

Liebe/-r Experte/-in,
Hallo zusammen,
ich nutze folgendes Script in Excel (2003), um Daten aus einer
Access-DB (2003) auszulesen und in Excel in eine Zelle zu
schreiben:

Hallo Jochen,

das Problem besteht in der Nutzung von ADO-DB-Zugriff.
Damit kann man auf einige DB-Systeme nicht zugreifen z.B. Oracle.
MS hat auch ab Office 2007 diese Schnittstelle aufgegeben.
Verwende stattdessen den Zugriff mit DAO:
Dim DBS as Database
Dim Data as DAO.Recordset
Set DBS = „C:\Test\Spiel.MDB“
Set Data = DBS.openrecordset(„tbl_Tabelle1“;dbopendynaset) 'schreibender Zugriff
dito jedoch dbopensnapsot ist lesender Zugriff.

Danach kannst Du auf die Tabelle zugreifen und am besten mit auslesen der einzelnen DS die Daten an Excel übergeben.

Grüße
Reinold
der DB-Entwickler
für schwierige Fälle

Ich hatte aehnliches in einem Projekt schon ohne Problem gemacht, allerdings damals mit DAO. Mangels Oracel jetzt kann ich mit deinem Code leider keine Versuche machen.
Sorry
Pete

Hmmm, schwer nachzuvollziehen, da ich gerade keine Oracle-Datenbank verfügbar habe.
Ich würde aber tippen, dass der Zugriff auf Oracle-Datenbanken über den ADODB Treiber nicht funktioniert bzw. den in der Connection angegebenen Microsoft.Jet -Treiber nicht mag?

Wie funktioniert der Zugriff innerhalb Access auf die Oracle-Datenbank? Hast Du da Zugriffsparameter in Access eingetragen? (Username, Passwort, servicename, etc.?) ggf. musst Du diese noch einmal irgendwie beim Zugriff auf die Access-Tabelle mitgeben - ich weiß aber nicht wie. sorry!

Ein Tipp noch: Du verlinkst die .mdb (datei) per F:\ - sofern es sich bei F:\ um ein von Dir verlinktes Netzlaufwerk handelt, nute besser den vollen Pfad: \\…\Daten\Access\LSM_NEU.mdb

Hallo Jochen,
ich tät’s mit DAO probieren … kan’s aber hier mangels ORACLE-DB nicht nachvollziehen, wo genau dein Problem losschlägt.

Viel Erfolg!
Katharina

Sorry für meine späte Antwort.

Leider habe ich derzeit keinen Zugriff auf eine Microsoft Office Version mehr. Daher kann ich keine Unterstützung mehr bieten.