【发布时间】:2021-12-01 12:42:46
【问题描述】:
我需要通过 Excel VBA 连接到 Oracle 数据库。
我在 VBA 中添加了“Microost ActiveX Data Objects 6.1”库。
由于我使用的是 64 位版本的 Excel(在 64 位 Windows 10 中),我认为我不能使用“Microsoft ODBC for Oracle”(似乎只有 32 位);这就是为什么我将“Oracle InstantClient v21.3”(InstantClient Basic、InstantClient ODBC 和 InstantClient SDK;全部用于 Windows x64)安装到“D:\D:\Program Files\Oracle ODBC”,然后使用提供的“odbc_install.exe”安装它。
我已将该文件夹添加到系统 PATH 和 TNS_ADMIN 系统变量中。
我的 TnsName.ora 有以下数据库定义:
DATAVIEW =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.x.x.x)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = **MyStats**)
)
)
我可以使用“PL SQL”连接到该数据库,而且每当我在 Windows 10 的“ODBC 数据源管理器(64 位)”中添加条目时,我都可以连接到数据库。此外,使用 Excel 本身中的“数据--> 获取数据--> 从其他来源--> 从 ODBC”选项,我可以在列表中看到“MyStats”数据库并可以连接到它。
我正在尝试使用 Excel VBA 中的以下代码连接到该数据库:
Dim Database_Connection As ADODB.Connection
Dim Record_Set As ADODB.Recordset
Dim Database_Connection_String As String
Set Database_Connection = New ADODB.Connection
Set Record_Set = New ADODB.Recordset
Database_Connection_String = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.x.x.x)(PORT=1521)))(CONNECT_DATA=(SID=MyStats)(SERVER=DEDICATED)));User Id=MyName;Password=MyPass;"
With Database_Connection
.ConnectionString = Database_Connection_String
.Open
End With
这会遇到不同的运行时错误(在“.Open”行中)。
我尝试提供“Provider=OraOLEDB.Oracle”、“Driver=Oracle in Oracle ODBC”。我尝试了基于 TNS 的字符串和独立的字符串(给出“Data Source=”、“Server=”、“DBQ=”和...)。我要么得到运行时错误 3706,即提供者未知,要么得到运行时错误 -2147217805 (80040e73)。
我搜索了很多论坛并阅读了很多示例。他们依赖 Microsoft ODBC for Oracle(这是我不想使用的)或让代码以某种我无法复制的方式运行。
我可以在连接字符串或驱动程序中给出不同的“提供者”名称吗?
如果您能给我提供基于 TNS 的字符串和独立的字符串,我将不胜感激。
【问题讨论】:
-
如果您使用 ODBC 数据源管理器创建了一个工作用户数据源,请尝试
"DSN=name;UID=user;PWD=password;" -
非常感谢;它确实有效。只是为了让我可以了解更多信息,我想知道您是否也可以帮助我编写一个独立于 TNS 的连接字符串。
-
好的,试试
"Driver={Oracle in Oracle ODBC};SERVER=servername;UID=username;PWD=password;"。其中Oracle in Oracle ODBC是您的 DSN 中的任何驱动程序名称。 -
无 TNS 的连接字符串应如下所示:connectionstrings.com/oracle-provider-for-ole-db-oraoledb/…
标签: excel vba oracle odbc connection-string