Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

OraSession Oracleinprocserver

Forumthread: OraSession Oracleinprocserver

OraSession Oracleinprocserver
31.08.2020 14:00:00
Michael
Habe bis vor kurzem immer auf eine Oracle 11 DB mittels folgenden Codes zugreifen können:
Dim OraSession As Object
Dim OraDatabase As Object
Set OraSession = CreateObject("OracleInProcServer.XOraSession")

Seit Umstellung der DB auf Version 19C und damit auch Erneuerung der Client software am PC bekomme ich nur die Fehlermeldung : runtime error: The specified module could not be found.
Das ist aufgrund der Umstellung auch nicht verwunderlich.
Ich benötige nun eine Hilfe, wie ich den alten Code (Set OraSession = CreateObject("OracleInProcServer.XOraSession"))
für die V19c ändern kann.
Im Vorhinein schon mal herzlichen Dank
Michael
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OraSession Oracleinprocserver
31.08.2020 14:25:04
peterk
Hallo
Laut Oracle:
Customers may migrate their OO4O data access code to ADO/OLE DB.
d.h. Du musst auf ADO umschreiben.
Peter
AW: OraSession Oracleinprocserver
01.09.2020 09:55:53
Michael
Danke für die Antwort.
Leider weiss ich nicht, wie ich das für ADO/OLE umschreiben soll.
Gibt es dafür Beispiele bzw. was muss ich in Vorbereitung (Referenzen etc. ) machen?
Bin für jede Unterstützung dankbar!
lg
Michael
Anzeige
AW: OraSession Oracleinprocserver
01.09.2020 14:28:22
Michael
Prozedur liest nur Daten aus der Oracle Datenbank aus - kein Schreiben!
Hier ein Teil der Routine der am Besten beschreibt wie das mit ODBC war.
-------------------------------------------------------------------------
Sub perf_input()
Dim OraSession As Object
Dim OraDatabase As Object
Dim RS As Object
Sheets("STU1").Activate
Range("A1").Select
'oeffnen der Oracle DAtabase und üebernahme der Daten
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.DbOpenDatabase("appdbprod", "maskdba/maskdbapw", 0&)
SEL = "C.CODE,A.TYP"
SOU1 = "MASKDBA.AKTIVE_MASKEN A, "
SOU2 = "MASKDBA.RETICLES B, "
SOU3 = "MASKDBA.MASK_LOCATIONS C "
SOU = SOU1 & SOU2 & SOU3
con = "A.ID=B.ID_MASK and B.ID_LOCATION=C.ID and B.AKTIV = 1 and (C.CODE='N' or C.CODE='E' or C.CODE='I' or C.CODE='K' or C.CODE='Q' or C.CODE='T')"
Set RS = OraDatabase.DbCreateDynaset("select " & SEL & " from " & SOU & " where " & con, 0&)
'Auslesen des Recordset
I = 0
While Not RS.EOF
For j = 0 To RS.Fields.Count - 1
If j = 0 Then
LOC = RS.Fields(j).Value
If LOC = "N" Then C1 = C1 + 1
If LOC = "E" Then C2 = C2 + 1
If LOC = "I" Then C3 = C3 + 1
If LOC = "K" Then C4 = C4 + 1
If LOC = "Q" Then C5 = C5 + 1
If LOC = "T" Then C6 = C6 + 1
' If X1 End If
If j = 1 Then
LOC = RS.Fields(j).Value
If LOC If LOC >= 2 Then C8 = C8 + 1
End If
Next j
RS.MoveNext
I = I + 1
Wend
RS.Close
OraDatabase.Close
_________________________________________________________________________________________
Aufgrund der Tips habe ich zumindest die Anmeldung via ADODB hinbekommen, aber beim RS.OPEN habe ich noch gewlatige probleme:
' Microsoft ActiveX Data Object 2.n Library must be referenced
Dim conDB As ADODB.Connection ' Connection Object
Dim rsRows As ADODB.Recordset ' DB Recordset
Dim strConnect As String ' Connect-String
strConnect = "Provider=OraOLEDB.Oracle" & _
";Data Source=" & "appdbprod" & _
";User Id=" & "maskxxx" & _
";Password=" & "maskxxxpw"
' Make the Connection
Set conDB = New ADODB.Connection ' New Instance of Connection
conDB.ConnectionString = strConnect ' Set the ConnectionString in Object
conDB.Open strConnect ' Connect to the Database
' Open Recordset and execute SQL
Set rsRows = New ADODB.Recordset ' New Instance of Recordset
rsRows.CursorLocation = adUseClient ' Set the CursorLocation-Attribute
---> rsRows.Open "SELECT * FROM myTable", conDB, adOpenStatic ' Select to DB
'....processing recordset
keine Ahnung wie ich das mit dem Befehl von oben unter "Auslesen der Recordset" (Set RS = OraDatabase.DbCreateDynaset("select " & SEL & " from " & SOU & " where " & con, 0&)) ändern soll?
lg
Michael
Anzeige
AW: OraSession Oracleinprocserver
01.09.2020 15:13:33
peterk
Hallo
Sollte so ähnlich funktionieren

Sub neu()
' Microsoft ActiveX Data Object 2.n Library must be referenced
Dim conDB As ADODB.Connection ' Connection Object
Dim rsRows As ADODB.Recordset ' DB Recordset
Dim strConnect As String ' Connect-String
strConnect = "Provider=OraOLEDB.Oracle" & _
";Data Source=" & "appdbprod" & _
";User Id=" & "maskxxx" & _
";Password=" & "maskxxxpw"
' Make the Connection
Set conDB = New ADODB.Connection ' New Instance of Connection
conDB.ConnectionString = strConnect ' Set the ConnectionString in Object
conDB.Open strConnect ' Connect to the Database
' Open Recordset and execute SQL
Set rsRows = New ADODB.Recordset ' New Instance of Recordset
rsRows.CursorLocation = adUseClient ' Set the CursorLocation-Attribute
SEL = "C.CODE,A.TYP"
SOU1 = "MASKDBA.AKTIVE_MASKEN A, "
SOU2 = "MASKDBA.RETICLES B, "
SOU3 = "MASKDBA.MASK_LOCATIONS C "
SOU = SOU1 & SOU2 & SOU3
con = "A.ID=B.ID_MASK and B.ID_LOCATION=C.ID and B.AKTIV = 1 and (C.CODE='N' or C.CODE='E'  _
or C.CODE='I' or C.CODE='K' or C.CODE='Q' or C.CODE='T')"
DBQuery = "select " & SEL & " from " & SOU & " where " & con & ";"
rsRows.Open Source:=DBQuery, ActiveConnection:=conDB, _
CursorType:=adOpenStatic, LockType:=adLockOptimistic
' copy whole recordset to a table, just for testing
'Worksheets("Tabelle1").Cells(1, 1).CopyFromRecordset rsRows
While Not rsRows.EOF
For j = 0 To rsRows.Fields.Count - 1
If j = 0 Then
Loc = rsRows.Fields(j).Value
If Loc = "N" Then C1 = C1 + 1
If Loc = "E" Then C2 = C2 + 1
If Loc = "I" Then C3 = C3 + 1
If Loc = "K" Then C4 = C4 + 1
If Loc = "Q" Then C5 = C5 + 1
If Loc = "T" Then C6 = C6 + 1
' If X1 = 2 Then C8 = C8 + 1
End If
Next j
rsRows.MoveNext
i = i + 1
Wend
End Sub

Anzeige
AW: OraSession Oracleinprocserver
01.09.2020 15:18:00
Michael
Danke für die schnelle Antwort!
Werde es morgen testen und berichten!
Herrlich wie schnell hier geholfen wird!!!
lg
Michael
AW: OraSession Oracleinprocserver
01.09.2020 16:38:47
Hajo_Zi
Hallo Michael,
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?
Das ist nur meine Meinung zu dem Thema.

Anzeige
;
Anzeige

Infobox / Tutorial

Zugriff auf Oracle 19c mit ADO/OLE DB in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Verweise aktivieren: Gehe in Excel zu Entwicklertools > Verweise und aktiviere die Microsoft ActiveX Data Objects 2.n Library.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code erstellen: Füge folgenden Code in ein neues Modul ein:

    Sub ZugriffAufOracle()
       Dim conDB As ADODB.Connection
       Dim rsRows As ADODB.Recordset
       Dim strConnect As String
    
       strConnect = "Provider=OraOLEDB.Oracle;" & _
                    "Data Source=appdbprod;" & _
                    "User Id=maskxxx;" & _
                    "Password=maskxxxpw"
    
       Set conDB = New ADODB.Connection
       conDB.ConnectionString = strConnect
       conDB.Open
    
       Set rsRows = New ADODB.Recordset
       rsRows.CursorLocation = adUseClient
    
       Dim DBQuery As String
       DBQuery = "SELECT * FROM myTable"
    
       rsRows.Open Source:=DBQuery, ActiveConnection:=conDB, _
                   CursorType:=adOpenStatic, LockType:=adLockOptimistic
    
       ' Hier kannst du die Daten verarbeiten
       While Not rsRows.EOF
           Debug.Print rsRows.Fields(0).Value ' Beispiel für Ausgabe
           rsRows.MoveNext
       Wend
    
       rsRows.Close
       conDB.Close
    End Sub
  4. Code anpassen: Ersetze "myTable" und die Verbindungsdaten mit deinen spezifischen Informationen.


Häufige Fehler und Lösungen

  • Fehler: "Microsoft ActiveX Data Object 2.n Library must be referenced"

    • Lösung: Stelle sicher, dass die richtige Version der Microsoft ActiveX Data Objects in den Verweisen aktiviert ist.
  • Fehler: "Runtime error: The specified module could not be found."

    • Lösung: Überprüfe, ob der OraOLEDB Provider korrekt installiert ist. Bei einer Umstellung auf Oracle 19c kann dies eine häufige Ursache sein.

Alternative Methoden

Falls du nicht mit ADO arbeiten möchtest, kannst du auch die Oracleinprocserver.xorasession verwenden, jedoch wird dies nicht empfohlen, da die Unterstützung für OO4O zurückgeht. Verwende stattdessen den ADO/OLE DB Ansatz für eine stabilere Verbindung zur Datenbank.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit ADO eine Abfrage an die Oracle-Datenbank sendest:

Sub DatenAbfragen()
    Dim conDB As ADODB.Connection
    Dim rsRows As ADODB.Recordset
    Dim strConnect As String

    strConnect = "Provider=OraOLEDB.Oracle;" & _
                 "Data Source=appdbprod;" & _
                 "User Id=maskxxx;" & _
                 "Password=maskxxxpw"

    Set conDB = New ADODB.Connection
    conDB.Open strConnect

    Set rsRows = New ADODB.Recordset
    rsRows.Open "SELECT C.CODE, A.TYP FROM MASKDBA.AKTIVE_MASKEN A, MASKDBA.RETICLES B" & _
                " WHERE A.ID = B.ID_MASK", conDB

    While Not rsRows.EOF
        Debug.Print rsRows.Fields(0).Value
        rsRows.MoveNext
    Wend

    rsRows.Close
    conDB.Close
End Sub

Tipps für Profis

  • Verwende Parameterabfragen für mehr Sicherheit und um SQL-Injection zu vermeiden.
  • Halte deine Verbindungszeichenfolgen in einer separaten Konfigurationsdatei, um sie leichter ändern zu können.
  • Nutze Error-Handling, um unerwartete Fehler während der Laufzeit zu erfassen und zu behandeln.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich die richtige Oracle-Version verwende? Überprüfe die installierte Version im Oracle-Client oder in der Systemsteuerung unter Programme.

2. Was ist der Unterschied zwischen ADO und OO4O? ADO ist die empfohlene Methode zur Verbindung mit Datenbanken und bietet mehr Flexibilität und Unterstützung, während OO4O veraltet ist und weniger Unterstützung bietet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige