Microsoft ODBC for Oracle 在 excel vba 中不起作用

Posted

技术标签:

【中文标题】Microsoft ODBC for Oracle 在 excel vba 中不起作用【英文标题】:Microsoft ODBC for Oracle not working in excel vba 【发布时间】:2014-08-16 09:01:00 【问题描述】:

我正在尝试使用 excel vba 2010 中的 odbc 方法连接到 oracle 数据库。我将采用这种方法,因为我想建立一个无 tns 的连接。

我开发了以下代码。

Private Sub cb_getExecutionPlanName_Click()

Dim conn As ADODB.Connection
Dim connString As String
Dim rsRecords As ADODB.Recordset

connString = "Driver=Microsoft ODBC for Oracle; CONNECTSTRING=(DESCRIPTION=(ADDRESS=    (PROTOCOL=TCP)(HOST=******)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**))); uid=***; pwd=***;"

Set conn = New ADODB.Connection
Set rsRecords = New ADODB.Recordset

conn.Open connString    // <<< Error thrown here

 rsRecords.Open "select name as name from w_etl_defn where inactive_flg = 'N';", conn

 i = 0
 With Me.ListBox1
  .Clear
  Do
    .AddItem
    .List(i, 0) = rsRecords!Name
    i = i + 1
    rsRecords.MoveNext
     Loop Until rsRecords.EOF
 End With

 rsRecords.Close
 Set rsRecords = Nothing
 conn.Close
 Set conn = Nothing

End Sub

但是,我在打开连接时遇到自动化错误。错误详情如下:

运行时错误'-2147467259(80004005);'

Automation Error
Unspecified Error

为什么突出显示的行会抛出此错误?

【问题讨论】:

您的问题是什么?不清楚您在这里问什么,如果您可以缩小引发错误的代码行,我们也许可以帮助您回答Why does this line of code throw an automation error? 形式 conn.Open connString conn.Open connString 语句引发自动化错误。问题来了 你安装了Oracle客户端吗?您是否测试过 Oracle 工具和 ODBC 的连接? 您安装了哪个 Oracle 客户端? 32位还是64位? Excel 是 32 位应用程序,因此 Oracle 客户端也必须是 32 位。 【参考方案1】:

我知道您正在保护您的主机名、密码等。但是,您需要获取连接字符串并确保它可以使用

sqlplus myuser/mypassword@`(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=******)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**)))'

如果这失败了,那么你的 sqlnet 字符串是错误的,或者你的密码和用户是错误的。您可以只依赖 tns_names.ora 文件或已安装客户端的 network/admin 目录中的其他文件,将字符串简化为 @myservice_or_sid。

@ElectricLlama 提出了一个很好的观点。如果您使用 MS Client for Oracle verses Oracle ODBC 驱动程序,那么您将遇到其他 Oracle 数据库对象的伤害。

【讨论】:

我的印象是,如果没有安装 Oracle 客户端,MS 客户端甚至无法工作。 connString = "Driver=Microsoft ODBC for Oracle;我看到的问题是MS客户端也不知道如何处理Oracle的重载函数和过程名称使用。 我在哪里使用这个 sqlplus... 代码?在 Excel VBA 执行此操作之前,我是否需要安装参考库? @Ammar Naseer 有几种方法可以连接到 Oracle 数据库。 sqlplus 在您的工作站上安装了 Oracle“客户端”。如果 Excel VBA 是您首选的数据库访问方法,您尝试使用 sqlplus 所做的只是确保您可以连接到数据库。这些想法就像一个“Hello World”程序。 Hello World 程序用于确保您可以编译您编写的简单程序。由于 sqlplus 是命令行工具,它经常用于自动化脚本中,无需 GUI 即可处理数据。

以上是关于Microsoft ODBC for Oracle 在 excel vba 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Oracle 和 JDBC 的 Microsoft ODBC

Microsoft OLEDB Provider for Oracle 找不到,怎么解决

使用 Microsoft Access ODBC 链接到 Oracle 控制哪些列成为主键

Sqlcmd:错误:Microsoft ODBC Driver 17 for SQL Server:用户“SA”登录失败

SQLSTATE[08001]:[Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序:错误代码 0x2746

[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效