我有一个访问数据库,位于网络驱动器上的共享文件夹中。
多台计算机通过excel访问它。用户有权通过Excel工作表更新和修改数据库。该数据库可作为Excel工作表中的嵌入式表格使用。
我正在使用Excel 2007。
为了使其正常工作,我自动运行宏,将数据源路径更改为计算机的路径。例如,在我的PC上,它可以位于C:/accessDB.accdb,但是在用户X的PC上,数据可以位于Z:/accessDB.accdb。
运行的更新如下:
mouse events
|
pan/zoom properties |
| |
| v
real-space properties <--+--> screen-space properties ------> depicted rectangle
| *
|
-------> API
完成后,我遍历数据库连接,并刷新数据库连接。代码如下:
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
点我的他们的PC而不是我自己的的错误如下:
conn.Refresh
连接对象如下所示:
连接属性如下所示:
任何帮助或指导都会受到赞赏,这是一个非常令人沮丧的错误,因为它已经工作了几个月而没有任何错误 - 更不用说,它对我的电脑工作正常。
答案 0 :(得分:0)
这似乎与代码无关,而且与我正在访问它的驱动器上的共享文件的Windows用户权限有关(感谢NinjaLlama指向我正确的方向) 。把它放到一个标准的数据库中显然是要走的路,但IT限制正在阻止这种情况发生。
我为了让它工作而做的是在用户的PC上打开一个空白的excel实例。然后我去了数据 - &gt; “从Access”并单击.accdb文件。然后,我点击了所有各个步骤,并将Access表导入到工作表中。然后我关闭了这张表,但不是实例。然后,我打开了实例中的文件,运行了宏,并且看到它已经没有任何问题地刷新了。
以这种方式连接显然已在文件系统/文件的某处解锁了一些权限。虽然这不是一个真正的解决方案,但它至少是确定错误来源的重要一步。