使用ODBC连接从Excel VBAmacros更新Oracle表

我在Excel 2010中有一个工作表,它通过ODBC DSN连接来自Oracle数据库的QueryTables中的数据。

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

我试图build立一个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数据库。

提供程序“MSDASQL”是Microsoft的ODBC驱动程序的OLE DB提供程序 。 这是相当古老的,现在被弃用。 它只适用于没有OLE DB提供程序的较旧的数据库。 它也是32位的,所以它不适用于64位提供者(比如你正在使用的提供者)。 您最好尝试一个OLE DB驱动程序。

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

您需要下载并安装Oracle提供程序(如果您尚未安装)

 .Provider = "OraOLEDB.Oracle" 

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

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