【问题标题】:Excel VBA: Connection Refresh errorExcel VBA:连接刷新错误
【发布时间】:2016-03-27 17:44:40
【问题描述】:

我有一个访问数据库,位于网络驱动器上的共享文件夹中。

它被多台计算机通过 excel 访问。用户有权通过 Excel 表更新和修改数据库。该数据库在 Excel 工作表中以嵌入表格的形式提供。

我正在使用 Excel 2007。

为了让它工作,我有一个自动运行的宏,它将数据源路径更改为计算机的路径。例如,在我的 PC 上,它可能位于 C:/accessDB.accdb,但在用户 X 的 PC 上,数据可能位于 Z:/accessDB.accdb。

正在运行的更新如下:

Dim connString As String
Dim folderLoc As String
Dim cn As WorkbookConnection
Dim oledbCn As OLEDBConnection

Set cn = ThisWorkbook.Connections(local_table)
Set oledbCn = cn.OLEDBConnection

folderLoc = ThisWorkbook _
            .sheets(settingSheet) _
            .Range(settingDbFileFolder).Value _
            & "\" & _
        ThisWorkbook _
            .sheets(settingSheet) _
            .Range(settingDbFileName).Value

connString = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & _
            folderLoc & _
            ";Mode=Share Deny None;Extended Properties=" & Chr(34) & Chr(34) & ";Jet OLEDB:System database=" & Chr(34) & Chr(34) & _
            ";Jet OLEDB:Registry Path=" & Chr(34) & Chr(34) & ";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1" & _
            ";Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" & Chr(34) & Chr(34) & _
            ";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False" & _
            ";Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"

If oledbCn.Connection <> connString Then
    oledbCn.Connection = connString
End If

完成后,我循环访问数据库连接,并刷新数据库连接。代码如下:

    Dim conn As OLEDBConnection
    If ThisWorkbook.Connections.Item(I).name = databaseName Then
        Set conn = ThisWorkbook.Connections.Item(I).OLEDBConnection
        conn.SourceDataFile = ""
        conn.Refresh
        conn.MaintainConnection = False
    End If

这几个月来一直运行良好。然而,在我的同事重新启动他们的计算机后,conn.Refresh 我在 他们的 PC 但不是我自己的 PC 上收到如下错误:

Run-time error '-2147417848 (80010108'

Method 'Refresh of object  'OLEDBConnection' failed

连接对象如下所示:

连接属性如下所示:

任何帮助或指导将不胜感激,这是一个非常令人沮丧的错误,因为它已经运行了几个月而没有任何错误 - 更不用说,它在我的电脑上运行良好。

【问题讨论】:

  • 我在使用 SQL 服务器时遇到了与此类似的问题,其他人在尝试访问数据库时都会出错,但我可以毫无问题地访问和编辑。问题最终是,当我迁移数据库时,权限以某种方式被更改,我不得不返回并编辑该用户组对数据库的权限。

标签: excel ms-access vba ms-access-2007


【解决方案1】:

这似乎与代码无关,而与我正在访问的驱动器上的共享文件的 Windows 用户权限有关(感谢 NinjaLlama 为我指明了正确的方向) .将其放入标准数据库显然是可行的方法,但 IT 限制暂时阻止了这种情况的发生。

为了让它工作,我所做的是在用户的 PC 上打开一个空白的 excel 实例。然后我转到数据->“从访问”并单击 .accdb 文件。然后,我单击了所有不同的步骤,并将 Access 表导入到工作表中。然后我关闭了这张表,但不是实例。然后,我在实例中打开文件,运行宏,发现它已经毫无问题地刷新了。

以这种方式连接显然解锁了文件系统/文件中某处的某些权限。虽然这并不是真正的解决方案,但它至少是找出错误来源的重要一步。

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2018-02-28
    相关资源
    最近更新 更多