Oracle 11g ado-Verbindungszeichenfolgen für ODBC (nicht OLEDB) mit den excel-VBA-64-bit (DSN-Less und tnsnames)
Bitte helfen. Ich habe recherchiert, diese für Stunden. Ich bekomme einige Teile funktionieren, andere aber nicht.
Was ich versuche zu tun ist, schreiben alle die connection-strings in excel-VBA eine Verbindung zu Oracle 11g Datenbank. Ich will nicht zum einrichten der Benutzer-DSN im ODBC-Administrator, und ich will nicht müssen erhalten eine tnsnames.ora-Datei.
Ich kann diese arbeiten für OLEDB-Verbindungszeichenfolgen aber ich glaube, das wird nicht mehr unterstützt von Oracle, so dass ich möchten, verwenden Sie den Oracle-ODBC-Treiber nur Befehle.
Dies ist, was ich habe zu arbeiten (das erfordert eine tnsnames.ora-Datei)
DRIVER={Oracle in OraClient11g_home1};DBQ=MyTNSnamesALias;UID=xxxx;PWD=xxxx
Habe ich versucht dies auch, aber ich bekomme eine TNS-Protokollfehler
DRIVER={Oracle in OraClient11g_home1};
Server=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=xxxx)))
(CONNECT_DATA=(SERVICE_NAME=xxx)(SERVER=DEDICATED)));UID=xxxx;PWD=xxxx
Andere nützliche information sein könnte, dass ich meine verbindungen zu funktionieren, wenn ich den DSN-Namen gemäß den ODBC-Administrator.
Anregungen würde sehr geschätzt werden
Dank
InformationsquelleAutor Rob | 2016-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
OLEDB-Provider von Oracle (
Provider=OraOLEDB.Oracle
) noch unterstützt, nur die provider von Microsoft (Provider=msdaora
) ist veraltet. Microsoft empfiehlt die Verwendung der Oracle-provider.Microsoft-Anbieter
msdaora
auch nicht für 64 Bit.Ich denke, Ihre Verbindungszeichenfolge für den Oracle-ODBC-muss diese (ohne Zeilenumbrüche):
Hinweis, für den Oracle-Treiber, die Sie verwenden müssen
DBQ
stattServer
.Server
ist das Attribut für den Microsoft ODBC-Treiber (z.B.Driver={Microsoft ODBC for Oracle}
)Dies funktioniert nun. Ich brauchte nicht die gesamte tnsnames Eintrag. Im Grunde ist der code wurde geändert, um con.ConnectionString = "DRIVER={Oracle in OraClient11g_home1};DBQ=hostname:port-Nummer/SID;UID=XXXXX;PWD=XXXX" konnte ich die Verbindung ohne tnsnames.ora-Eintrag erforderlich oder jedem DSN-setup den ODBC-Administrator. Vielen Dank auch für die Aufklärung um die ALTE DB. Mein Fehler, so habe ich gelesen, so viel über die Verwendung von OLE-v ODBC-und ich weiß wirklich nicht, warum Sie haben 2 verschiedene Möglichkeiten zu verbinden. Was ist besser in der jeder seine Meinung?
ODBC ist mehr Generika (Sie haben ODBC-Treiber auch für CSV-Dateien),so müssen Sie möglicherweise einige Einschränkungen, wenn Sie mit Oracle arbeiten. Sie sollten es verwenden, wenn Sie haben, arbeiten mit einer unterschiedlichen Anzahl von verschiedenen Datenquellen. OLE-DB ist speziell für die einzelnen RDBMS, denke ich, dass OLE DB bringt mehr Gewinn (zumindest auf dem Papier, keine Ahnung über die praktischen Unterschiede) bei der Arbeit mit Oracle-DB.
InformationsquelleAutor Wernfried Domscheit
Gibt es keine Möglichkeit, die Verbindung mit
Oracle ODBC driver
ohne TNS-alias bereits konfigurierttnsnames.ora
- Datei.Alle Konfigurationsschritte erwähnt in
Oracle ODBC Driver
Dokumentation erfordert es:Auch in Dokumentation für SQLDriverConnect Umsetzung
DBQ
parameter festgestellt, wie erforderlich, und übergeben Sie einen Namen, der TNS-alias dieser parameter ist nur Methode, um anzugeben server zu verbinden.Weil es ein common-API-Funktion verwendet, die von allen Kunden von Oracle ODBC-Treiber, gibt es keine Möglichkeit, dass einige andere Schnittstelle (COM-Objekt -, Konfigurations-dialog oder etwas anderes) akzeptieren, können verschiedene Parameter für die Verbindung.
Gibt es keine solche Möglichkeit, in Oracle Objects for OLE zu.
Kann ich nichts finden über die Aufhebung der
Oracle Provider for OLEDB
unterstützen.Es wurde veröffentlicht als Teil der neuesten version ODAC: "ODAC 12c Release 4 (12.1.0.2.4)" und dieser release ist ein top-news-Thema im entsprechenden Abschnitt der Oracle-Seite im moment.
Es gibt einige Verbesserungen in den neuesten Versionen und Unterstützung für den Einsatz aus .NET-Anwendungen.
Auch, es funktioniert (zumindest bei mir):
Basierend auf dem oben, empfehle ich, bleiben Sie mit OLE DB-Provider, nur update ODAC zu einem neueste version.
Wenn Sie nicht möchten, verwenden Sie OLEDB-an alle, gibt es eine Variante mit Microsoft ODBC-Treiber(
"Driver={Microsoft ODBC for Oracle};"
) mit detaillierten server-Parameter-Spezifikation inCONNECTSTRING
:Natürlich, diese Variante hat Ihre eigenen Nachteile. Zumindest gibt es viel mehr Wahrscheinlichkeit Unterstützung Stornierung von der Microsoft-Seite als auch von Seite von Oracle.
TNS
. Ein "TNS" - Zeichenfolge ist eine Zeichenfolge wie diese:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server_host)(PORT=1521))(CONNECT_DATA=(SID=ORASERVERSID)))
. Dateitnsnames.ora
wird verwendet, um zu definieren ein alias für solche TNS. z.B.ORASERVERSID = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server_host)(PORT=1521))(CONNECT_DATA=(SID=ORASERVERSID)))
. Es gibt andere Möglichkeiten, einen alias definieren, beispielsweise durch einen LDAP-server. Im Allgemeinen TNS string und TNS-alias sind vollständig austauschbar.Allgemeine TNS string und TNS-alias sind völlig austauschbar", also habe ich gemischt 🙂 ich sah durch die Antwort und versuchen, spezifischer zu sein, mit "TNS -" Begriff. Bitte fühlen Sie sich frei zu Bearbeiten, zu beantworten und korrigieren eines verbleibenden Inkonsistenzen. Vielen Dank für einen Kommentar!
Entfernen Sie den ersten Absatz, dann Ihre Antwort ist in Ordnung. Ein connectionstring wie
Driver={Oracle in OraClient11g_home1};DBQ=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx)(SERVER=DEDICATED)));Pwd=xxx;Uid=xxx
nicht benötigttnsnames.ora
Datei! Eintnsnames.ora
Datei (oder einen LDAP-server) ist nur erforderlich, wenn Sie es vorziehen, verwenden Sie einen alias wieDriver={Oracle in OraClient11g_home1};DBQ=MY_ORADB;Pwd=xxx;Uid=xxx
. Der alias "MY_ORADB" definiert wird, in dertnsnames.ora
- Datei. Wenn Sie nicht über die Datei, müssen Sie die vollständige TNS string.Sorry, aber den ersten Absatz (und Frage) ist über die Fähigkeiten von Oracle ODBC-Treiber,, nicht um generische Oracle-client. Also den ersten Absatz falsch sind, nur, wenn jemand Erfolg mit der Verbindung zu Oracle mit Oracle ODBC-Treiber,, ohne Angabe von alias-Namen. Kann etwas falsch mit der Formulierung des ersten Satzes ... ich wechselte "mit" zu "verwenden", vielleicht hilft es.
InformationsquelleAutor ThinkJet