【发布时间】: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