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