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

Forumthread: per ADO auf Oracle-DB schreiben

per ADO auf Oracle-DB schreiben
22.02.2017 12:47:55
Joachim
Hallo,
ich will Datensätze in einer Oracle-DB per VBA aktualisieren. Früher hatte ich das schon mal mit einer MySQL-DB gemacht. Davon hab ich den Code genommen und angepasst, wobei das mit der MySQL-DB auch nicht mehr geht. Vielleicht muss ich noch unter Extras/Verweise was anhaken, bzw. mir wurde ein neuer PC hingestellt, wo evtl. nicht alles nötige installiert wurde.
Hier die Codes:
Private Sub ConnectDB()
Dim oConn As New ADODB.Connection
oConn.Open "DRIVER={Microsoft ODBC for Oracle}; SERVER=10.1.xxx.xxx; DATABASE=aaaa; USER=bbb;  _
PASSWORD=123abc; Option=3"
End Sub
Private Sub schreiben()
Dim rs As New ADODB.Connection
Dim strSQL As String
Dim fdh As String
Dim wst As Integer
Dim est As Integer
fdh = Sheets("Import").Range("A2").Value
wst = Sheets("Import").Range("E2").Value
est = Sheets("Import").Range("F2").Value
ConnectDB
strSQL = "UPDATE liegenschaften SET wetterstation_nr = " & wst & ", ersatzstation = " & est & "  _
_
WHERE liegenschaft_nr = " & fdh & " "
rs.Open strSQL, oConn
End Sub

Es kommt der Laufzeitfehler -2147467259 (80004005) Automatisierungsfehler, Unbekannter Fehler (bei beiden Subs)
Woran könnte das liegen?
Gruß
Joachim
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per ADO auf Oracle-DB schreiben
22.02.2017 13:08:23
JoWE
Hallo,
der Verweis "Microsoft ActiveX Data Object 6.0 Library" muss aktiviert sein
Gruß
Jochen
AW: per ADO auf Oracle-DB schreiben
22.02.2017 13:16:24
Joachim
Hallo Jochen
der Verweis "Microsoft ActiveX Data Objects 6.1 Library" ist aktiviert
Gruß
Joachim
AW: vielleicht mit Version 2.8 ...
22.02.2017 14:07:06
JoWE
Anzeige
Version 2.8 ... hilft nix
22.02.2017 14:23:09
Joachim
owt
Schmeisse die MS-ODBCfor Oracle in die Tonne
22.02.2017 14:30:38
EtoPHG
Joachim,
Installiere die von Oracle zur Verfügung gestellten Driver. Die von MS funktionieren nicht mehr.
Gruess Hansueli
Anzeige
das hilft etz auch nicht weiter
22.02.2017 16:09:38
Joachim
owT
wie bitte?
22.02.2017 17:41:41
EtoPHG
Hallo Joachim,
Warum nicht? Die Microsoft ODBC Driver für Oracle sind nicht mehr funktionsfähig.
Wenn du auf eine oracle-DB zugreifen willst, musst du die oracle-ODBC-Driver installieren.
Oder glaubst du, wir können dir via Forum etwas liefern, dass das macht? Es hängt zuerst an den Driver und zuletzt am Code!
Gruess Hansueli
Anzeige
...vielleicht hilft ein Beispiel,
23.02.2017 08:20:44
EtoPHG
Joachim,
Als (anonymisiertes) Beispiel eine (funktionierende) Verbindung zu einer oracle-DB auf einer ausfallsicheren Umgebung. Falls nur 1 DB zur Verfügung steht, die Failover,Loadbalance und Host2... Settings weglassen:
Option Explicit
Sub BeispielOracleConnect()
' 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
' Build the Connect-String (The oracle-OLE-Driver must be installed!)
'  _
http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html
strConnect = "Provider=OraOLEDB.Oracle" & _
";Data Source=" & "(DESCRIPTION=(ADDRESS_LIST=(FAILOVER=ON)" & _
"(LOAD_BALANCE=OFF)(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=myhost1.name.or.ip-address)(PORT=1234))" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=myhost2.name.or.ip-address)(PORT=1234)))" & _
"(CONNECT_DATA=(SERVICE_NAME=my-service-name)))" & _
";User Id=" & "myUserId" & _
";Password=" & "myPassword"
' 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
End Sub

Gruess Hansueli
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Datenbankverbindung per ADO in Oracle mit Excel VBA herstellen


Schritt-für-Schritt-Anleitung

  1. Verweise aktivieren: Stelle sicher, dass der Verweis auf die "Microsoft ActiveX Data Objects 2.x Library" in Deinem VBA-Projekt aktiviert ist. Gehe dazu auf Extras > Verweise und aktiviere den entsprechenden Eintrag.

  2. ODBC-Treiber installieren: Installiere die Oracle ODBC-Treiber, da die Microsoft ODBC-Treiber für Oracle nicht mehr funktionsfähig sind. Du kannst die Treiber von der Oracle-Website herunterladen.

  3. Verbindung herstellen: Nutze den folgenden Code, um eine Verbindung zur Oracle-Datenbank herzustellen. Achte darauf, die Verbindungsdaten (Server, Benutzer, Passwort) entsprechend Deiner Datenbank anzupassen.

    Private Sub ConnectDB()
       Dim oConn As New ADODB.Connection
       oConn.Open "Provider=OraOLEDB.Oracle; User Id=myUserId; Password=myPassword; Data Source=myDataSource;"
    End Sub
  4. SQL-Befehl ausführen: Um Daten in der Oracle-Datenbank zu aktualisieren, kannst Du den folgenden Code verwenden:

    Private Sub UpdateData()
       Dim oConn As ADODB.Connection
       Dim strSQL As String
       Dim identifier As String
    
       identifier = Sheets("Import").Range("A2").Value
       strSQL = "UPDATE myTable SET columnName = 'newValue' WHERE id = " & identifier
    
       Set oConn = New ADODB.Connection
       oConn.Open "Provider=OraOLEDB.Oracle; User Id=myUserId; Password=myPassword; Data Source=myDataSource;"
       oConn.Execute strSQL
       oConn.Close
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler -2147467259 (80004005): Dieser Fehler tritt häufig auf, wenn die ODBC-Treiber nicht korrekt installiert sind. Stelle sicher, dass die Oracle ODBC-Treiber installiert sind und die Verbindungsdaten korrekt sind.

  • Fehlende Referenzen: Überprüfe, ob der richtige Verweis auf die "Microsoft ActiveX Data Objects" Bibliothek gesetzt ist. Manchmal kann auch eine ältere Version (z.B. 2.8) Probleme verursachen. Aktiviere die neueste Version.


Alternative Methoden

  • ADO.NET: Wenn Du mit .NET arbeitest, kannst Du ADO.NET verwenden, um eine Verbindung zu Oracle herzustellen. Dies ist besonders nützlich, wenn Du umfangreiche Datenoperationen in einer .NET-Anwendung durchführen möchtest.

  • Oracle SQL Developer: Nutze Oracle SQL Developer, um SQL-Abfragen direkt gegen die Datenbank auszuführen, bevor Du sie in VBA implementierst. Dies hilft, Syntaxfehler zu vermeiden.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du Daten von Excel in eine Oracle-Datenbank mit VBA über ADO übertragen kannst:

Sub BeispielOracleDatenÜbertragen()
    Dim oConn As New ADODB.Connection
    Dim strSQL As String
    Dim identifier As String

    ' Verbindung zur Oracle-Datenbank
    oConn.Open "Provider=OraOLEDB.Oracle; User Id=myUserId; Password=myPassword; Data Source=myDataSource;"

    ' SQL-Befehl zum Einfügen von Daten
    strSQL = "INSERT INTO myTable (column1, column2) VALUES ('value1', 'value2')"

    ' SQL-Befehl ausführen
    oConn.Execute strSQL
    oConn.Close
End Sub

Tipps für Profis

  • Verwende Parameter: Anstatt Werte direkt in Deine SQL-Abfragen einzufügen, solltest Du Parameter verwenden, um SQL-Injection zu vermeiden und die Lesbarkeit zu erhöhen.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass die Verbindung zur Datenbank immer ordnungsgemäß geschlossen wird, auch wenn ein Fehler auftritt.

  • Verbindungs-Management: Überlege, Deine Verbindung in einer separaten Funktion oder Klasse zu kapseln, um den Code modularer und wartungsfreundlicher zu gestalten.


FAQ: Häufige Fragen

1. Wie stelle ich eine Verbindung zu einer Oracle-Datenbank in Excel her? Um eine Verbindung zu einer Oracle-Datenbank herzustellen, musst Du die Oracle ODBC-Treiber installieren und den entsprechenden ADO-Code in VBA verwenden.

2. Was tun bei Laufzeitfehlern? Überprüfe, ob alle benötigten Treiber installiert sind und ob Deine Verbindungszeichenfolge korrekt ist. Achte darauf, dass alle Verweise in Deinem VBA-Projekt gesetzt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige