Laufzeitfehler bei ODBC Zugriff auf Oracle Datenbank mit VBA
Hallo zusammen,
ich das Problem, dass ich von VBA einen Laufzeitfehler gemeldet bekomme.
Folgende Fehlermeldung:
"Laufzeitfehler: '-2147217865 (80040e37)': Automatisierungsfehler"

Das Ganze passiert beim Aufrufen eines SQL Statements. Folgenden Code verwende ich:
Set cnOra = New ADODB.Connection
Set rsOra = New ADODB.Recordset
db_name = "READ_ONLY" '
UserName = "USER"
Password = "PW"
Statistikwerte_Monat = "E.Monate_" & IntMonat + 12
' Alle Monatswerte Umsatz, Absatz (UAK, ABAK), Sachbearbeiter, USCHL
StrSelect = _
"Select " _
& "E.Datenfelder_1 ArtNr, E.Datenfelder_2 KdNr, A.Sachbearbeiter SB, A.Uschl US, E.Satzart SA, A.Sachbereich SachB, " _
& Statistikwerte_Monat & " AktMon " _
& "from Infor.relEs E left join Infor.relAc A on E.Datenfelder_1 = A.MNr " _
& "where E.Satzart in ('UAK', 'ABAK')" _
& "and " & Statistikwerte_Monat & " > 0"
cnOra.Open "DSN=" + db_name + ";UID=" + UserName + ";PWD=" + Password + ";"
rsOra.CursorLocation = adUseServer
rsOra.Open StrSelect, cnOra, adOpenForwardOnly
Die Fehlermeldung erscheint beim Ausführen der letzten Zeile.
Weitere Info: der Benutzer "USER" ist nicht Inhaber des Schemas. Benutze ich den User des Schemas, dann wird der Code problemlos abgearbeitet.
Kann das vielleicht an dem Treiber liegen? Für den "USER" nutze ich den MS ODBC Treiber für Oracle.
Vielen Dank für Eure Hilfe!
Grüße,
firsty
ich das Problem, dass ich von VBA einen Laufzeitfehler gemeldet bekomme.
Folgende Fehlermeldung:
"Laufzeitfehler: '-2147217865 (80040e37)': Automatisierungsfehler"

Das Ganze passiert beim Aufrufen eines SQL Statements. Folgenden Code verwende ich:
Set cnOra = New ADODB.Connection
Set rsOra = New ADODB.Recordset
db_name = "READ_ONLY" '
UserName = "USER"
Password = "PW"
Statistikwerte_Monat = "E.Monate_" & IntMonat + 12
' Alle Monatswerte Umsatz, Absatz (UAK, ABAK), Sachbearbeiter, USCHL
StrSelect = _
"Select " _
& "E.Datenfelder_1 ArtNr, E.Datenfelder_2 KdNr, A.Sachbearbeiter SB, A.Uschl US, E.Satzart SA, A.Sachbereich SachB, " _
& Statistikwerte_Monat & " AktMon " _
& "from Infor.relEs E left join Infor.relAc A on E.Datenfelder_1 = A.MNr " _
& "where E.Satzart in ('UAK', 'ABAK')" _
& "and " & Statistikwerte_Monat & " > 0"
cnOra.Open "DSN=" + db_name + ";UID=" + UserName + ";PWD=" + Password + ";"
rsOra.CursorLocation = adUseServer
rsOra.Open StrSelect, cnOra, adOpenForwardOnly
Die Fehlermeldung erscheint beim Ausführen der letzten Zeile.
Weitere Info: der Benutzer "USER" ist nicht Inhaber des Schemas. Benutze ich den User des Schemas, dann wird der Code problemlos abgearbeitet.
Kann das vielleicht an dem Treiber liegen? Für den "USER" nutze ich den MS ODBC Treiber für Oracle.
Vielen Dank für Eure Hilfe!
Grüße,
firsty
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85146
Url: https://administrator.de/forum/laufzeitfehler-bei-odbc-zugriff-auf-oracle-datenbank-mit-vba-85146.html
Ausgedruckt am: 21.05.2025 um 00:05 Uhr
11 Kommentare
Neuester Kommentar
Moin firsty78,
@ora version:
Schick mal dieses Statement rüber:
Als ResultSet sollte eine Zeile zurückkommen mit etwas ähnlichem wie
Diese Versionsnummer (7, 8 ,9,...) war gefragt.
Andere Frage: Das der Nicht-Owner-Benutzer die Leserechte auf beiden Tabellen hat ist gewährleistet?
ich frage nur der Vollständigkeit halber: ich tippe auch auf den M$-Oracle-Treiber.
Meistens ist das einzige, was der treibt, Anwendern Tränen in die Augen.
Grüße
Biber
@ora version:
Schick mal dieses Statement rüber:
SELECT * FROM v$version WHERE banner LIKE '%Oracle%'
Oracle Database 11i Internal Edition Release 11.2.0.0.9 - Beta
Diese Versionsnummer (7, 8 ,9,...) war gefragt.
Andere Frage: Das der Nicht-Owner-Benutzer die Leserechte auf beiden Tabellen hat ist gewährleistet?
ich frage nur der Vollständigkeit halber: ich tippe auch auf den M$-Oracle-Treiber.
Meistens ist das einzige, was der treibt, Anwendern Tränen in die Augen.
Grüße
Biber
ja wie was?
Wenn Du doch ohnehin SQlPlus hast, dann siehst Du doch beim Anmelden diese Versionsnummer....?
???
Mag sein, dass dieses VBA-"SQL" statt der Standard-Wildcard-Zeichen "%" die M$-Zeichen "*" haben will.
Aber ein "select * from v$version" sollte IMMER und für jeden User funktionieren.
Grüße
Biber
Wenn Du doch ohnehin SQlPlus hast, dann siehst Du doch beim Anmelden diese Versionsnummer....?
Connected to:
Oracle Database 11i Internal Edition Release 11.2.0.0.9 - Beta
With the Partitioning, OLAP and Data Mining options
SQL> select * from v$version where banner like '%Ora%';
BANNER
----------------------------------------------------------------
Oracle Database 11i Internal Edition Release 11.2.0.0.9 - Beta
???
Mag sein, dass dieses VBA-"SQL" statt der Standard-Wildcard-Zeichen "%" die M$-Zeichen "*" haben will.
Aber ein "select * from v$version" sollte IMMER und für jeden User funktionieren.
Grüße
Biber
Moin firsty78,
wir werden des Rätsels Lösung schon finden...
Nochmal zur Sicherheit:
Ich denke nicht, dass sich Deine CursorLocation auf dem Server befindet.
Aber schaun wir mal...
Grüße
Biber
wir werden des Rätsels Lösung schon finden...
als Trenner die Varianten "." und "_" probiert,
Brauchst Du nicht probieren. Wenn "Trenner", dann ist es der Punkt, also SchemaName.Tabname.Nochmal zur Sicherheit:
- der ausführende User hat SELECT-Rechte auf beide Tabellen (oder Views)?
- oder soll er über ein Synonym zugreifen? Dann braucht er die Rechte auf Views/Tabellen zusätzlich
- weil Deine Datenbank den merkwürdigen Namen "READ_ONLY" trägt: hilft es vielleicht, falls Du beiden vorangegangenen Fragen mit einem entrüsteten "Selbstverständlich!" abschmettern konntest, wenn Du in Deinem VB-Zeugs noch folgendes einfügst bzw. änderst:
'....
Const adUseClient = 3
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1 ' Gilt später für den RS -->RS.LockType = adLockReadOnly
'...
Const adModeRead = 1
'....
'########rsOra.CursorLocation = adUseServer
cnOra.CursorLocation = adUseClient
cnOra.Mode = adModeRead
rsOra.CursorLocation = adUseClient
rsOra.LockType = adLockReadOnly
rsOra.Open StrSelect, cnOra, adOpenForwardOnly
...
Ich denke nicht, dass sich Deine CursorLocation auf dem Server befindet.
Aber schaun wir mal...
Grüße
Biber
Moin firsty78,
siehst Du... Computerprobleme sind alle mit gesundem Menschenverstand zu lösen <grinz>.
Was noch offen ist (und ziemlich weit auf Deiner Prio-Liste hochgeschoben werden sollte):
Kläre mit Deinem Cheffe und den Infor-Hansels und -Gretels, wer denn nun (also wie viele Leute) die User-Administriererei machen kann/machen darf/machen soll.
Vor allem das ganz banale Einrichten/Anlegen von Usern und Granten von Rechten.
Das GRANTen von Rechten gehört sicherlich NICHT zu den Aufgaben, für die eine Software-Entwicklungsklitsche irgendwo hinter Wuppertal benötigt wird.
Wenn Du mit denen telefoniert hast, dann sitzen die wahrscheinlich nicht zwei Schreibtische weiter, sondern ZU WEIT WEG, um den normalen alltäglichen Wahns^H^H^H Ablauf bei Euch zu garantieren.
Lass Dir im erstem Schritt erstmal auf eine UserID Deiner Wahl (z.B. VorOrtAdmin) ein "GRANT ALL" incl "GRANT GRANT" auf die Datenbank(en) geben.
Und dann baust Du oder sonst ein Interessierter in Eurer Firma das Knowhow dazu auf.
Grüße
Biber
siehst Du... Computerprobleme sind alle mit gesundem Menschenverstand zu lösen <grinz>.
Was noch offen ist (und ziemlich weit auf Deiner Prio-Liste hochgeschoben werden sollte):
Kläre mit Deinem Cheffe und den Infor-Hansels und -Gretels, wer denn nun (also wie viele Leute) die User-Administriererei machen kann/machen darf/machen soll.
Vor allem das ganz banale Einrichten/Anlegen von Usern und Granten von Rechten.
Das GRANTen von Rechten gehört sicherlich NICHT zu den Aufgaben, für die eine Software-Entwicklungsklitsche irgendwo hinter Wuppertal benötigt wird.
Wenn Du mit denen telefoniert hast, dann sitzen die wahrscheinlich nicht zwei Schreibtische weiter, sondern ZU WEIT WEG, um den normalen alltäglichen Wahns^H^H^H Ablauf bei Euch zu garantieren.
Lass Dir im erstem Schritt erstmal auf eine UserID Deiner Wahl (z.B. VorOrtAdmin) ein "GRANT ALL" incl "GRANT GRANT" auf die Datenbank(en) geben.
Und dann baust Du oder sonst ein Interessierter in Eurer Firma das Knowhow dazu auf.
Grüße
Biber