【问题标题】:Updating Oracle Table from Excel VBA Macro using ODBC connection使用 ODBC 连接从 Excel VBA 宏更新 Oracle 表
【发布时间】:2013-09-16 19:20:53
【问题描述】:

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

【问题讨论】:

  • 您可能会发现使用宏记录器并复制它是如何连接的洞察力
  • 我应该执行什么操作来记录在没有 QueryTable 的情况下连接的宏?
  • 我的连接字符串遵循 DSN;UID;PWD; 的约定。这是一个系统 ODBC,它的用户 ID 和密码存储在 ODBC 中,所以我只需要指定 DSN。我尝试将 UID 和 PWD 放在连接字符串中,但它产生了相同的错误。

标签: oracle excel vba odbc ado


【解决方案1】:

提供者“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/ 中的一些示例。

【讨论】:

    【解决方案2】:

    显然'运行时错误'-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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多