Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Verbindung zu Oracle Datenbank

Betrifft: VBA Verbindung zu Oracle Datenbank von: Juu
Geschrieben am: 17.09.2020 11:20:51

Hallo zusammen,

ich versuche nun schon seit mehreren Tagen einen VBA Code zu schreiben, der eine Verbindung zu einer Datenbank herstellt aber krieg es einfach nicht zum laufen. Über den SQL Developer, kann ich auf die Datenbank zugreifen.

Der folgende ist mein aktuellster Code, ich habe aber auch schon einige andere ausprobiert:

Sub DB_Connection()
Dim dbConnection As ADODB.Connection
Dim recordSet As ADODB.recordSet
    
    Set dbConnection = New ADODB.Connection
    Set recordSet = New ADODB.recordSet
    'conString = "Driver={Oracle in OraClient12Home1_32bit};DBQ=345;Uid=Mein Username;Pwd=Mein  _
Passwort;"
    conString = "Provider=msdaora;Data Source=MyOracleDB;User Id=Mein Username;Password=Mein  _
Passwort;"
    dbConnection.Open (conString)
End Sub


Ich habe sowohl den OraClient12Home1_32bit als auch den Microsoft ODBC for Oracle Treiber heruntergeladen (in der Hoffnung, dass es mit einem von beiden klappt). Die Umgebungsvariablen habe ich nach Anleitung angepasst und die entsprechenden Werte im tnsnames file geändert.

Ich bin mir ehrlich gesagt nicht sicher ob im connection string oben mein Wert für DBQ richtig ist, ich habe dort die SID eingetragen.

Ich erhalte folgende Fehlermeldung mit der ich wenig anfangen kann:


Kann mir jemand helfen?

Vielen Dank im Voraus!

Betrifft: AW: VBA Verbindung zu Oracle Datenbank
von: Luschi
Geschrieben am: 17.09.2020 11:54:02

Hallo Juu,

meine Top-Page für SQL-Verbindungen ist:
https://www.connectionstrings.com/
und speziell für Oracle:
https://www.connectionstrings.com/oracle/

Gruß von Luschi
aus klein-Paris

Betrifft: AW: VBA Verbindung zu Oracle Datenbank
von: Juu
Geschrieben am: 17.09.2020 11:58:34

@Luschi vielen Dank für deine Antworten. Ich kenne beide Seiten aber leider klappt es trotzdem nicht.

Betrifft: AW: VBA Verbindung zu Oracle Datenbank
von: Juu
Geschrieben am: 18.09.2020 08:29:50

Hat sonst noch jemand eine Idee?

Betrifft: AW: VBA Verbindung zu Oracle Datenbank
von: EtoPHG
Geschrieben am: 21.09.2020 12:57:10

Hallo Juu,

Seit Jahren benutze ich die Original-Driver von oracle für den Zugriff auf Oracle DB's.
Diese sind verfügbar auf der Seite 32-bit Oracle Data Access Components (ODAC). Mit diesen konnte ich selbst oracle-DB's auf verteilten System und automatischen Failover-DB's erfolgreich abgreifen. ZIP-Datei herunterladen und installieren.
Die Komponenten habe ich auf EXCEL Versionen 2010...365(2019) und oracle DB's V12...V18 ohne Änderungen eingesetzt.

Der Connectstring in VBA lautet dann etwa so (kursive Teile durch deine Angaben ersetzen):
        strConnect = "Provider=OraOLEDB.Oracle" & _
                     ";Data Source=" & "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" & _ 
                          "(HOST=DeinDBHost)(PORT=DeinePortNr))" & _
                          "(CONNECT_DATA=(SERVICE_NAME=DeinServiceName)))" & _
                     ";User Id=" & "DeineUserId" & _
                     ";Password=" & "DeinPasswort"

Gruess Hansueli

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: EtoPHG
Geschrieben am: 21.09.2020 13:17:26

Hall nochmals,

Ein Nachtrag:
1. Die Datei ODTwithODAC1120320_32bit.zip auf einen lokalen Drive herunterladen
2. Auf dem C:\ODTwithODAC1120320_32bit.zip Entpacken in ein Temp-Verzeichnis
3. im Temp-Verzeichnis Setup.exe aufrufen
4. Installieren von [x] Oracle Data Access Components for Oracle Client 11.2.0.3.20
5. Optimieren über eine benutzerdefinierte Installation nur diese Komponenten installieren
5.1. Oracle Provider for OLE DB 11.2.0.3.0 
5.2. Oracle Objects for OLE 11.2.0.3.0
Alle anderen Komponenten sind für den DB-Zugriff aus EXCEL nicht nötig. 

Gruess Hansueli

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: Juu
Geschrieben am: 22.09.2020 09:59:52

Hallo Hansueli,



vielen lieben Dank für deine Hilfe. Das hört sich sehr vielversprechend an und ich werde es gleich ausprobieren.



Viele Grüße

Juu

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: Juu
Geschrieben am: 22.09.2020 11:42:00

Ich habe deine Lösung gerade ausprobiert und bekomme keine Fehlermeldung mehr, wenn ich den Code ausführe. Allerdings schließt sich die VBA Datei wenn ich die Zeile: dbConnection.Open (conString) öffne. Anschließend öffnet sich die VBA Datei sofort wieder. Hast du eine Idee woran das liegen könnte?

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: EtoPHG
Geschrieben am: 22.09.2020 11:57:08

Hallo Juu,

Was genau verstehst du unter einer VBA-Datei? Ich kenne nur Exceldateien, ggf. mit VBA-Code, den man im VBE(ditor) anschauen, modifizieren, debuggen und überwachen kann.
In den Extras des VBE(editors) musst du die Verweise kontrollieren, ob denn auch die Komponenten der installierten oracle Komponenten markiert sind.
Ich kann mir dein beschriebenes Verhalten nicht vorstellen. Markiert der VBEditor beim Kompilieren irgendwelche Fehlermeldungen aus? P.S. als erste Codezeile in jedem Modul:
Option Explicit

Damit forcierst du, dass alle Variablen ausdrücklich definiert werden müssen und verhinderst damit ev. Schreibfehler/Referenzierung in Variablen-Namen.
Wenn du weiterhin Probleme hast, stell wenigstens den gesamten Code zu Analyse ins Forum.
Besser wäre natürlich gleich eine Bespielmappe.

Gruess Hansueli

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: Juu
Geschrieben am: 22.09.2020 12:31:44

Hallo Hansueli,

vielen Dank für deine Hilfe. Mit VBA-Datei meine ich die Excel Datei, in der sich mein Code befindet.

Mein gesamter Code sieht aktuell folgendermaßen aus:
Option Explicit

Sub DB_Connection()
Dim dbConnection As ADODB.Connection
Dim recordSet As ADODB.recordSet
Dim conString As String

    
    Set dbConnection = New ADODB.Connection
    Set recordSet = New ADODB.recordSet
    
    conString = "Provider=OraOLEDB.Oracle" & _
                     ";Data Source=" & "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" & _
                          "(HOST=MeinHostName(IPAdresse))(PORT=MeinPort))" & _
                          "(CONNECT_DATA=(SERVICE_NAME=MeinServiceName)))" & _
                     ";User Id=" & "MeinUserName" & _
                     ";Password=" & "MeinPasswort"
                     
    dbConnection.Open (conString)

End Sub
Der Code stürzt in der Zeile dbConnection.Open (conString) ab.

Folgende Libraries habe ich ausgewählt (und auch schon einmal entfernt und wieder neu ausgewählt aber das hat das Problem leider nicht behoben)



Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: EtoPHG
Geschrieben am: 22.09.2020 13:55:34

Hallo,

Es fehlt der Verweis "Microsoft Data Access Components Installed version"

Ob die (IPADRESSE) nötig ist, kann ich nicht beurteilen, eigentlich müsste diese durch den Hostnamen automatisch aufgelöst werden. Ich würde sie ggf. mal weglassen.

Zudem was heisst stürzt ab? Ist es immer noch die gleiche Fehlermeldung wie im ersten Post, oder eine andere ?

Ersetzte dein OPEN Statement mal durch die folgenden Codezeilen:
dbConnection.Connectionstring = conString
dbConnection.Open conString

Gruess Hansueli

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: Juu
Geschrieben am: 22.09.2020 14:29:38

Hallo,

ich habe den Verweis hinzugefügt und die entsprechenden Codezeilen ersetzt. Mit (IP Adresse) habe ich gemeint, dass die IP Adresse der Hostname ist (so wird es mir im SQL Developer, wo ich die Verbindung erfolgreich einrichten konnte, angezeigt).

Wenn ich den Code ausführe schließt sich Excel automatisch und es wird mir keine Fehlermeldung angezeigt.

Ich habe das Gefühl, dass das Problem an der Installation des Treibers liegt, die fand ich nicht ganz eindeutig und ich kann mir gut vorstellen, dass ich da Fehler gemacht habe. Könnte das sein? Ich versuche ihn gerade neu zu installieren.

Den Folgenden Schritt der Installation habe ich beim ersten Mal überlesen. Ich habe aktuell allerdings auch Probleme den Schritt auszuführen, da ich den beschriebenen SQL*Plus Eintrag im Visual Studio nicht finden kann. Ist der Schritt notwendig?

2. Executing the SQL Scripts

As noted during the install, the setup SQL scripts must be executed before
using any of the Oracle Providers for ASP.NET. For details, please see
Chapter 1 of the Oracle Providers for ASP.NET Developer's Guide.

If you don't have SQL*Plus to execute SQL scripts, you may install and use
Oracle Developer Tools (ODT) for Visual Studio to execute those
scripts. Below are the steps:

a) Start up Visual Studio. Under Tools menu, select Run
SQL*Plus Script.

b) In the 'Run SQL*Plus Script' dialog box, click New Connection button.

c) In the Connection Properties dialog box, select "Oracle Database
Server (Oracle ODP.NET)" for Data Source and "Oracle Data Provider
for .NET" for Data Provider. Select a TNS alias
from Data Source Name drop-down list. If no entry is available, see
SQL*Net setup above. Enter a username and password, or select Use
Windows integrated authentication. Click Test Connection button to
test the connection. If it's successful, click the OK button to
continue.

NOTE: The scripts will create tables, stored procedures, views, and
roles. They will be owned by the database user that executed the
scripts. If the ASP.NET applications connect to the database as a
different database user than the database user that executed the
scripts, the database user (who owns the database objects that were
created for ASP.NET providers) will need to grant roles to other
database users, if they require access. For further details, please
read Chapter 1 of the Oracle Providers for ASP.NET user's Guide for
details.


Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: EtoPHG
Geschrieben am: 22.09.2020 15:11:34

Hallo,

Alles überflüssiges Zeug!
Installiere nur die beiden im Textfile erwähnten Komponenten.
Das sich Excel ohne Meldung schliesst, ist mir noch nie begegnet.

Gruess Hansueli

Betrifft: AW: Anmerkung zur Installation der oracle-Driver
von: Juu
Geschrieben am: 23.09.2020 07:39:01

Hallo nochmal,

ich habe den Treiber neu installiert (die SQL Skripte habe ich auch ausgeführt aber wahrscheinlich war das unnötig) und zusammen mit deinen Anmerkungen funktioniert es nun endlich.

Tausend Dank!

Viele Grüße
juu

Beiträge aus dem Excel-Forum zum Thema "VBA Verbindung zu Oracle Datenbank"