1

我在 Excel 2010 中有一张表格,它从 Oracle 数据库中提取 QueryTables 中的数据,通过 ODBC DSN 连接。

我需要从电子表格中获取数据并使用它来更新同一 Oracle 数据库中的表。我无法从 QueryTable 进行更新,但这是我能够使用 ODBC 的唯一连接方法。

我尝试建立 ADODB 连接,但我得到了一个

'Run-time error '-2147467259 (80004005'):

Automation error
Unspecified error

这是我使用的代码:

Sub Upload_Click()
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection

    With cn
        .Provider = "MSDASQL"
        .ConnectionString = "DSN=xcognosD;"
        .Open
    End With

    cn.Close
End Sub

补充说明,我在 Windows 7 上使用 64 位 odbc 驱动程序,连接到 Oracle 11 数据库。

4

2 回答 2

4

提供程序“MSDASQL”是Microsoft 的用于 ODBC 驱动程序的 OLE DB 提供程序。它很旧,现在已被弃用。它实际上只适用于没有 OLE DB 提供程序的旧数据库。它也是仅 32 位的,因此它不适用于 64 位提供程序(例如您尝试使用的提供程序)。您最好尝试使用 OLE DB 驱动程序。

Oracle的MS OLEDB 提供程序是“MSDAORA”(应该预先安装在您的机器上),Oracle 自己的 OLEDB 提供程序是“OraOLEDB.Oracle”。最好建议您下载最新的 Oracle 提供的提供程序,因为 MSDAORA 也已被弃用。

您需要下载并安装 Oracle 提供程序(如果您还没有)

.Provider = "OraOLEDB.Oracle"

您还需要设置.ConnectionString. 查看http://www.connectionstrings.com/oracle-provider-for-ole-db-oraoledb/中的一些示例。

于 2013-09-19T23:43:09.523 回答
0

显然'运行时错误'-2147467259(80004005)'是excel的默认值'Oracle有问题,我不知道它是什么。

首先我发现我的 odbc 指向一个不再存在的旧数据库。更新 odbc 后,我仍然遇到同样的错误。

但是,错误不再发生在“.Open”部分,而是发生在我试图进行更新的 .Execute 上。最终我发现用户无权更新我的目标表。

因此,当您收到“运行时错误 '-2147467259 (80004005)”错误时,请检查您的连接和权限,它们可能是错误的。

这是我在修复权限后使用的最终代码:

Sub Upload_Click1()
    Dim Oracon
    Dim recset
    Dim cmd

    Set Oracon = CreateObject("ADODB.Connection")
    Set cmd = CreateObject("ADODB.Recordset")

    Oracon.Open "Data Source=xcognosD;"

    Oracon.Execute "update xstore set last_update_date = sysdate where store_cd = '0000'"

    Oracon.Close

End Sub
于 2013-09-20T15:43:39.970 回答