【问题标题】:"Unspecified error" while opening an ADODB connection打开 ADODB 连接时出现“未指定的错误”
【发布时间】:2015-11-04 16:41:17
【问题描述】:

我的只有一台 PC 的用户遇到了“未指定的错误”

运行时错误“-2147467259 (80004005)”:
未指明的错误

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

我认为这是驱动程序问题,并在用户的 PC 中安装了 Access 2007 数据库引擎,并将 Provider 替换为“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

【问题讨论】:

  • Windows中是否映射了“网络共享驱动器”?共享是 Windows / SAMBA 共享吗?您是否对此共享具有适当的权限,并且这些权限是在您映射共享时输入的?您是否尝试使用本地计算机上的 Access 数据库(例如 C:\tmp)打开它?
  • Initialize.GetDbConnectionString 返回什么?
  • 当您手动尝试从用户 PC 打开该文件时会发生什么?可能是windows用户没有访问权限。路径是 UNC 还是驱动器号?
  • 如果是 Windows 7,网络驱动器存在一个已知问题,据我所知,有时驱动器仍在刷新,文件被“另一个用户”锁定,这在 2015 年仍未修复。
  • 如果问题只发生在“一台 PC”上,那么这台 PC 本身可能是问题的根源。您是否查看过该特定 PC 上的 Windows Event Log 以获取有关问题所在的更多信息?这台 PC 是否特定?这台 PC 与您的代码工作的另一台 PC 有何不同?

标签: excel vba ms-access adodb oledbconnection


【解决方案1】:

我在从本地 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 位)

【讨论】:

    【解决方案2】:

    您的 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
    

    【讨论】:

      【解决方案3】:

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

      我在包含原始宏的同一文件中编写了一些测试宏,用于打开与本地 DB 文件和远程 DB 文件的 DB 连接。测试是成功的,但由于某种原因,一个特定的宏仍然会在该特定用户的机器中抛出“未指定的错误”。

      我们得出结论,这很可能是由于办公室损坏了。我们将修理办公室,希望这能解决问题。如果这有效,会通知您。

      谢谢。

      【讨论】:

      • 修复Office后有什么结果吗?
      【解决方案4】:

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

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

      【讨论】:

      • 从能够解读行为背后原因的人那里获得的见解
      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2012-10-12
      • 1970-01-01
      • 2012-06-22
      相关资源
      最近更新 更多