从 Excel VBA 连接到 Oracle 数据库

问题描述 投票:0回答:2

我需要通过 Excel VBA 连接到 Oracle 数据库。

我在 VBA 中添加了“Micorost 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(这是我不想使用的),或者让代码以某种我无法复制的方式运行。

我可以在连接字符串或驱动程序中给出不同的“Provider”名称吗?

如果您能给我基于 TNS 的字符串和独立字符串,我将不胜感激。

excel vba oracle odbc connection-string
2个回答
0
投票

有类似的问题,但经过长时间的研究,我能够用这样的连接字符串解决它:

    Dim Cn As New ADODB.Connection
    With Cn
        .ConnectionString = "Driver={Oracle in instantclient_21_3};" & _
                            "DBQ=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=<service_name>)));UID=<user_name>; PWD=<password>;"

        Call .Open
    End With

请相应地更改 <...> 值。


0
投票

要使用 VBA 从 Excel 连接到 Oracle 数据库,您需要使用 Oracle Provider for OLE DB 或 ODBC 驱动程序。确保连接字符串准确且与您的数据库配置匹配。 高知的 android 开发课程 您可能需要根据您的设置调整提供程序或语法。这应该可以帮助您开始使用 VBA 将 Excel 连接到 Oracle 数据库。

© www.soinside.com 2019 - 2024. All rights reserved.