我有一组存储在网络驱动器上的Access数据库。这些数据库有自己的表,并链接到此驱动器中其他数据库的其他表。由于查询是通过网络运行的,因此需要一段时间才能完成。有没有办法我可以创建一个选项,将所需的对象复制到本地文件夹运行查询,然后将结果带回网络中的原始数据库?
答案 0 :(得分:1)
我也有这个问题。我将源数据和我的数据库复制到我的本地驱动器并添加两件事:
首先是一个表("链接表源"),它告诉保存链接表的位置。第一行有db在网络上时使用的位置,第二行显示当我在我的本地PC上时源数据的位置(在我的情况下,B:)
ID source path
1 network \\usa0300swg02\sthq\corptax\tax\shared\Common Tables 2016.accdb
2 local b:\Common Tables 2016.accdb
然后我有一个我在autoexec宏中设置的VBA函数,每当我加载数据库时都会运行:
Function relink_tables()
If Left(CurrentDb().Name, 2) = "C:" Or Left(CurrentDb().Name, 2) = "B:" Then
Source = "local"
Else: Source = "network"
End If
Set rs = CurrentDb.OpenRecordset("select * from [linked table source] where source='" & Source & "'")
Source = rs.Fields("path")
For Each R In References
If InStr(R.Name, "Common Tables") > 0 Then Application.References.Remove R
Next R
Application.References.AddFromFile Source
x = 0
Set TDefs = CurrentDb().TableDefs
For Each table In TDefs
If InStr(table.Connect, "Common Tables") = 0 Then GoTo NT
table.Connect = ";DATABASE=" & Source
table.RefreshLink
x = x + 1
NT:
Next table
Finish:
MsgBox "remapped " & x & " tables"
End Function
注意:
附加说明 - 正如上面的Hynek Bernard评论的那样,版本控制和多用户访问是很重要的考虑因素。在我的情况下,当我使用本地副本时,我可以控制其他人正在使用数据库。如果您拥有SharePoint或类似内容,则另一个选项是将其用作网络上的数据库存储库,并使用签出和签入功能进行控制。您仍然需要获取下载数据位置的正确链接。