使用ODBC连接从Excel VBA宏更新Oracle表

时间:2013-09-16 19:20:54

标签: oracle excel vba odbc ado

我在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数据库。

2 个答案:

答案 0 :(得分:4)

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

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

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

.Provider = "OraOLEDB.Oracle"

您还需要设置.ConnectionString。有些例子,请查看http://www.connectionstrings.com/oracle-provider-for-ole-db-oraoledb/

答案 1 :(得分: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