firsty78

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"

b1ff2c3bf733d7e1ca25283df75591c0-lzf

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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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

SvenGuenter
SvenGuenter 11.04.2008 um 15:31:07 Uhr
Goto Top
welche ora version und welcher treiber und mit welchem Tool setzt due das SQL ab ;o)

dann kann man evtl weiterhelfen.
firsty78
firsty78 11.04.2008 um 15:43:46 Uhr
Goto Top
Hallo Sven,

ich hoffe, dass ich mich beim Beantworten der Frage nicht vollständig blamiere.

Tool: VBA Excel
Treiber: Microsoft ODBC Treiber für Oracle (ist der Treiber, der standardmäßig bei Datenquellen (ODBC) vorhanden ist und installiert werden kann)
ora version: da muss ich leider passen, ich hab keine Ahnung. face-sad Vielleicht kannst Du kurz beschreiben, was Du meinst (bin noch nicht so lange im Geschäft !!)

Grüße,
firsty
Biber
Biber 11.04.2008 um 16:38:15 Uhr
Goto Top
Moin firsty78,

@ora version:

Schick mal dieses Statement rüber:
SELECT * FROM v$version	WHERE banner LIKE '%Oracle%'  
Als ResultSet sollte eine Zeile zurückkommen mit etwas ähnlichem wie
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
firsty78
firsty78 11.04.2008 um 16:58:32 Uhr
Goto Top
Hallo Biber,

wo soll ich das ausführen? In VBA klappts nicht und in SQLPlus wills auch nicht so recht face-sad

Grüße
firsty
Biber
Biber 11.04.2008 um 17:20:03 Uhr
Goto Top
ja wie was?
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
firsty78
firsty78 11.04.2008 um 17:59:36 Uhr
Goto Top
Na ok, bei mir kommt Versionsnummer 9.2.0.6.0
Biber
Biber 11.04.2008 um 18:12:40 Uhr
Goto Top
Nächste Frage,

wenn Du SQL-Plus hast, dann hast Du doch wohl auch den ganzen Oracle-Client installiert.
Und damit doch den (vermutlich) Instantclient-ODBC-Treiber von Oracle.
Kannst Du den mal ausprobieren? (Name steht unter "Verwaltung->ODBC-Verbindungen->System-DSN")

Grüße
Biber
firsty78
firsty78 14.04.2008 um 08:17:40 Uhr
Goto Top
den hab ich ausprobiert.

Da kommt die Fehlermeldung "Table or View does not exist"

Ich habe auch an das Userschema gedacht (damit hatte ich bereits in der Vergangenheit Probleme).

Beim Userschema habe ich als Trenner die Varianten "." und "_" probiert, also

...
from Infor.relEs E left join Infor.relAc A on E.Datenfelder_1 = A.MNr
...

bzw.
...
from Infor_relEs E left join Infor_relAc A on E.Datenfelder_1 = A.MNr
...

Ich blick da einfach nicht durch...
Biber
Biber 14.04.2008 um 09:05:44 Uhr
Goto Top
Moin firsty78,

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
firsty78
firsty78 16.04.2008 um 14:30:51 Uhr
Goto Top
Hallo Biber,

habe die ganze Zeit nicht geantwortet, da ich intensiv auf Ursachenforschung gewesen bin.

Nach einem längeren Telefonat mit dem Infor Experten sind wir darauf gekommen, dass bei der Anlage dieses Benutzers teilweise keine SELECT-Rechte vergeben wurden - aus welchen Gründen auch immer, ist bis dato noch nicht ganz klar (Sollte Inforseitig eigentlich so sein).

Die Rechte haben wir jetzt vergeben und siehe da, es funktioniert.

Vielen Dank für Deine Tips. Alleine hätte ich bestimmt nicht in diese Richtung recherchiert.

Grüße,
firsty
Biber
Biber 16.04.2008 um 17:49:26 Uhr
Goto Top
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