【问题标题】:Connect To Oracle Database From Excel VBA从 Excel VBA 连接到 Oracle 数据库
【发布时间】: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


【解决方案1】:

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

    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

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

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 2014-04-04
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多