"未指定的错误"打开ADODB连接时

时间:2015-08-12 07:43:34

标签: vba excel-vba access-vba adodb oledbconnection

我在只有一台PC 的用户中遇到"未指定错误"

  

运行时错误' -2147467259(80004005)':
  未指定的错误

我正在运行以下VBA代码以打开与位于网络共享驱动器中的Access数据库的连接。但代码在尝试运行.Open语句时会抛出错误。

我认为这是一个驱动程序问题,并在用户的PC中安装了Access 2007数据库引擎,并用" Microsoft.ACE.OLEDB.12.0"但它没有用。

代码:

 Dim cn As ADODB.Connection
 Dim rs As ADODB.Recordset
 Dim retVal As Boolean
 Dim strSQL As String
 retVal = False

    On Error GoTo CatchError
     Set cn = New ADODB.Connection

     With cn
     .Provider = "Microsoft.Jet.OLEDB.4.0"
     .Properties("Jet OLEDB:Database Password") = Initialize.GetDBPwd 'returns pass
     .Open Initialize.GetDbConnectionString 'returns the network DB path
    End With

4 个答案:

答案 0 :(得分:2)

在从本地Excel文件到另一个本地 Excel 文件进行ADODB连接时,我遇到了同样的问题。

我解决这个问题的唯一方法是重新打开主 Excel 文件,然后从中进行连接。没有其他事情,功能再次起作用。

我的连接功能:

Sub SetConReadOnly(ByRef con1 As Object, ByRef rst1 As Object, sFile As String)
    If con1 Is Nothing Then Set con1 = CreateObject("ADODB.Connection")
    If rst1 Is Nothing Then Set rst1 = CreateObject("ADODB.Recordset")

    con1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
     "Data Source=" & sFile & ";" & _
     "Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
End Sub

(我使用Office 2013 32位,Windows 7 64位)

答案 1 :(得分:1)

您的Excel版本是什么?

我遇到了这个错误,而解决方案正在改变提供商。尝试改为:

On Error GoTo CatchError
 Set cn = New ADODB.Connection

 With cn
 .provider = "Microsoft.Mashup.OleDb.1"
 .Properties("Jet OLEDB:Database Password") = Initialize.GetDBPwd 'returns pass
 .Open Initialize.GetDbConnectionString 'returns the network DB path
End With

答案 2 :(得分:0)

仍未找到此问题的任何解决方案,但似乎问题仅限于一个用户。

我在同一个具有原始宏的文件中编写了一些测试宏,这些宏打开了与本地数据库文件和远程数据库文件的数据库连接。测试成功但由于某种原因,一个特定的宏仍然会抛出" Unspecified Error"在那个特定的用户机器上。

我们得出的结论很可能是办公室被破坏了。我们将修复办公室,希望能解决这个问题。如果有效,会通知您。

感谢。

答案 3 :(得分:0)

我遇到过这个问题并发现此问题特定于具有32位Office安装的Win7 64位。我偶然遇到的解决方案是,如果我手动保存文件并重新运行代码,它会无缝地发布。试图在错误处理程序中包含一个保存并再次调用main函数时不起作用。但是,通过Application.SendKeys“^ s”保存文件,然后通过另一个线程运行该文件可能会复制手动保存的结果。

在进一步调查中,我发现错误是因为源中的某些列是在查询之前的运行时添加的,并且似乎sql引擎从不同的内部原始源查询,除非更新更新,除非保存发生,这就是错误的原因。