获取 Excel VBA ADO SQL 连接错误 - 找不到文件(错误 -2147467259 (80004005))
Getting Excel VBA ADO SQL connection error - Can't find the file (error -2147467259 (80004005))
我有这个 Excel 电子表格,我需要在其中进行一些查询。我一直在使用 ADO OLEDB 驱动程序来使用 SQL 语言,因为它比必须循环查找调用更简单。它已经在几个不同的 Window 和办公版本(32 位和 64 位)上进行了测试和使用,并且始终按预期工作。
昨天,几个同事开始在他们的旧机器(Windows 7 和 Offices 2013 32 位)上使用它,这就是问题开始的地方。
我不断收到此错误,并引用 "The Microsoft Access database engine could not find the object 'C:\Users...\Spreadsheet.xlsm'. Apparently, in some of those Computers, the driver is unable connect to the very same Excel file that is calling from, which is weird because that never happened before and this is not a M. Access file (which usually get locked once they are open). If I duplicate the file,and change its name and the driver source path to the copied file, all it works fine, so apparently the driver is working "fine”。最后一个奇怪的部分是,有几台机器具有相似的环境,但只有其中一些机器有效。
遗憾的是,我无法在我的电脑或任何其他电脑上重现该错误。
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
cn.Open strCon 'This is where I get the error.
如果我复制 Excel 电子表格并将其放在 C:\(例如),然后将已打开的 excel 文件的路径更改为复制的文件,它工作正常。
像这样
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & "C:\UnopenCopyOfTheFile.xlsm" _
& ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
cn.Open strCon 'This works, but i end up with two files.
有人知道是什么导致了这种奇怪的行为吗?
我要回答我自己的问题,因为这是一个环境问题,而不是真正的编程问题。
正如我所怀疑的那样,库通常存在问题,尤其是负责处理 Access 文件的库(我什至无法从 Excel 打开数据源以访问 Access 文件),所以我重新安装了 Access 引擎驱动器和 restored/repaired Microsoft Office 安装。这就成功了。
我有这个 Excel 电子表格,我需要在其中进行一些查询。我一直在使用 ADO OLEDB 驱动程序来使用 SQL 语言,因为它比必须循环查找调用更简单。它已经在几个不同的 Window 和办公版本(32 位和 64 位)上进行了测试和使用,并且始终按预期工作。 昨天,几个同事开始在他们的旧机器(Windows 7 和 Offices 2013 32 位)上使用它,这就是问题开始的地方。
我不断收到此错误,并引用 "The Microsoft Access database engine could not find the object 'C:\Users...\Spreadsheet.xlsm'. Apparently, in some of those Computers, the driver is unable connect to the very same Excel file that is calling from, which is weird because that never happened before and this is not a M. Access file (which usually get locked once they are open). If I duplicate the file,and change its name and the driver source path to the copied file, all it works fine, so apparently the driver is working "fine”。最后一个奇怪的部分是,有几台机器具有相似的环境,但只有其中一些机器有效。
遗憾的是,我无法在我的电脑或任何其他电脑上重现该错误。
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
cn.Open strCon 'This is where I get the error.
如果我复制 Excel 电子表格并将其放在 C:\(例如),然后将已打开的 excel 文件的路径更改为复制的文件,它工作正常。
像这样
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & "C:\UnopenCopyOfTheFile.xlsm" _
& ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 3
cn.Open strCon 'This works, but i end up with two files.
有人知道是什么导致了这种奇怪的行为吗?
我要回答我自己的问题,因为这是一个环境问题,而不是真正的编程问题。 正如我所怀疑的那样,库通常存在问题,尤其是负责处理 Access 文件的库(我什至无法从 Excel 打开数据源以访问 Access 文件),所以我重新安装了 Access 引擎驱动器和 restored/repaired Microsoft Office 安装。这就成功了。