Visual Basic
Von: Ρtоnkа, 23.3.2012 10:55 Uhr
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



  1. Antwort von Ѕurfіn Wіllү 1
    Re: In Excel per VBA Access-DB auslesen
    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: \\<server>\<Ordner1>\<Ordner2>\...\Daten\Access\LSM_NEU.mdb
    • Antwort von GrΙngо (abgemeldet) 0
      Re: In Excel per VBA Access-DB auslesen
      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
      • Antwort von Rаіnеr Еngеlһаrdt (abgemeldet) 0
        Re: In Excel per VBA Access-DB auslesen
        Sorry, tut mir Leid, mit Access kenne ich mich nicht aus.
        Viel Erfolg
        Rainer
        • Antwort von mbѕt 0
          Re: In Excel per VBA Access-DB auslesen
          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.... :-)
          die oracle konnt ich damals nicht direkt anzapfen -->

          workaround war: Tabellenwerstellungsabfrage im access und die dann im xls auswerten...
          • Antwort von Vаndrоү 0
            Re: In Excel per VBA Access-DB auslesen
            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
            • Antwort von νfrеі 0
              Re: In Excel per VBA Access-DB auslesen
              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
              • Antwort von Βаmbеrg 0
                Re: In Excel per VBA Access-DB auslesen
                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
                • Antwort von еrwіn1957 0
                  Re: In Excel per VBA Access-DB auslesen
                  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:
                  • Antwort von Rеіnоld 0
                    Re: In Excel per VBA Access-DB auslesen
                    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
                    • Re: In Excel per VBA Access-DB auslesen
                      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
                      • Re: In Excel per VBA Access-DB auslesen
                        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
                        • Re: In Excel per VBA Access-DB auslesen
                          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.