PDA

Vollständige Version anzeigen : VBA Oracle DB auslesen


lalaland
03.09.2017, 15:06
Schönen guten Tag.
Ich versuche seit einigen Tagen eine Verbindung zu einer Oracle DB aufzubauen, dort Daten zu selektieren und diese in eine meine Tabelle (Sheet) einzufügen.
Das ganze soll mittels VBA verwirklicht werden da es um mehrere Datensätze geht und dies täglich wiederholt werden soll.

Die übernommen Daten werden in Excel weiterverarbeitet.

Folgende Punkte werden zur Verbindung zur Oracle DB benötigt und stehen mir natürlich zur Verfügung:

Database: Oracle
Hostname: IP-ADDRESS
Port: PORT
SID: SID
User: USERNAME
Password: PASSWORD

Eine Verbindung mit dem SQL Developer ist ohne Probleme möglich.

Soweit mir bekannt ist ist dafür der Oracle ODBC Treiber vonnöten.
Diesen habe ich herruntergeladen und kann ihn im ODBC Daten Administrator nutzen.

Dazu schon ein paar Fragen.

Muss ich diesen Treiber in die 32bit oder 64bit des ODBC Daten Administrator einbinden?
In welches DNS muss er eingerichtet werden? (User DNS, File DNS, System DNS)
Muss man beim einfügen noch irgendwas beachten?

Kurze Anmerkung, eine Testverbindung im ODBC Daten Administrator ist erfolgreich. (64bit, System DNS)

Genutzt wird der Treiber direkt von Oracle -> 'instantclient-odbc-windows.x64-12.2.0.1.0'


So jetzt zu Excel / VBA:


Sub Macro2()
Dim TNS_INFO As String
Dim cnxDB As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
TNS_INFO = "(DESCRIPTION=" & _
"(ADDRESS_LIST=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST= IP-ADDRESE)" & _
"(PORT=1521)))" & _
"(CONNECT_DATA=(SID=DIEPASSENDESID)" & _
"(SERVER=DEDICATED)))"

cnxDB.ConnectionString = "Provider=OraOLEDB.Oracle;" & _
"Data Source=" & TNS_INFO & ";" & _
"user id=USERNAME;" & _
"password=PASSWORD"
Debug.Print cnxDB.ConnectionString
cnxDB.Open


sql = "SELECT*From IRGENDWAS"
Set rs = New ADODB.Recordset
rs.Open sql, cnxDB
rs.MoveFirst
ActiveCell.CopyFromRecordset rs
rs.Close
cnxDB.Close
Set rs = Nothing
Set cn = Nothing
End Sub


Dies ist soweit mein 'TestCode', welcher in der Zeile 'rs.Open sql, cnxDB' fehlschlägt.

Ich weiß natürlich nicht ob es an falschen Treiber leigt, oder der genutzte Code falsch ist oder oder oder.

Könnt ihr da vllt mal drauf schauen?

Ziel soll sein das die Verbindung aufgebaut wird, die "Select" Anfrage hingeschickt wird. Das kompette Ergebniss kopieren und in mein ausgewähltes Sheet (Tabelle) einfügen.

Drogist
03.09.2017, 15:31
Moin, das Ganze sollte auch mit Power Query gehen; da ist schon eine Möglichkeit zum Zugriff auf das Orakel integriert.

lalaland
03.09.2017, 16:04
Schönen guten Tag.

Über DATEN -> FROM OTHER SOURCES kann ich mühelos Tabellen aus dieser Datenbank ziehen.
Nur finde ich keine Möglichkeit dort SQL Anfragen an die Datenbank zu senden.

ABER
Ich benötige das ganze als Macro (VBA) da ich die SQL Anfrage mit Variablen zusammenbaue, es immer auf verschiedene Sheets (Tabellen) kopiert werden muss und es sehr sehr viele Abfragen sein sollen.

Trotzdem Danke :)

Vllt gibt es ja noch weitere gute Tipps

ebs17
03.09.2017, 17:01
sql = "SELECT * FROM IRGENDWAS"
Eine SQL-Anweisung muss entsprechend der nötigen Syntax formuliert werden. Dazu gehört auch, dass Schlüsselworte durch Leerzeichen von anderen Bezeichnern getrennt werden.

lalaland
03.09.2017, 17:07
Danke für die Antwort ebs17,

nur leider versteh ich nicht genau was du meinst?
Das Beispiel:
"SELECT * FROM IRGENDWAS"
dient hier nur als Platzfüller.
Gernutzt wird eine riesig große Anweisung, welche im SQL Developer funktioniert.

ebs17
03.09.2017, 17:36
sql = "SELECT*From IRGENDWAS"
sql = "SELECT * FROM IRGENDWAS"
Der Unterschied zwischen beiden Gestaltungen fällt Dir auf?

Mit dem Öffnen des Recordsets wird jedenfalls die SQL-Anweisung ausgeführt. Wenn es knallt, ist da ein Fehler enthalten.

Gernutzt wird eine riesig große Anweisung, welche im SQL Developer funktioniert.
So, wie das duch Deine bisherige Darstellung dargestellt wird?

SQL Developer ... ist woher?