firsty78
Goto Top

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

Content-Key: 85146

Url: https://administrator.de/contentid/85146

Printed on: April 23, 2024 at 23:04 o'clock

Member: SvenGuenter
SvenGuenter Apr 11, 2008 at 13:31:07 (UTC)
Goto Top
welche ora version und welcher treiber und mit welchem Tool setzt due das SQL ab ;o)

dann kann man evtl weiterhelfen.
Member: firsty78
firsty78 Apr 11, 2008 at 13:43:46 (UTC)
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
Member: Biber
Biber Apr 11, 2008 at 14:38:15 (UTC)
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
Member: firsty78
firsty78 Apr 11, 2008 at 14:58:32 (UTC)
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
Member: Biber
Biber Apr 11, 2008 at 15:20:03 (UTC)
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
Member: firsty78
firsty78 Apr 11, 2008 at 15:59:36 (UTC)
Goto Top
Na ok, bei mir kommt Versionsnummer 9.2.0.6.0
Member: Biber
Biber Apr 11, 2008 at 16:12:40 (UTC)
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
Member: firsty78
firsty78 Apr 14, 2008 at 06:17:40 (UTC)
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...
Member: Biber
Biber Apr 14, 2008 at 07:05:44 (UTC)
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
Member: firsty78
firsty78 Apr 16, 2008 at 12:30:51 (UTC)
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
Member: Biber
Biber Apr 16, 2008 at 15:49:26 (UTC)
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