从本地网络驱动器运行访问查询

时间:2016-08-12 15:02:05

标签: sql vba ms-access

我有一组存储在网络驱动器上的Access数据库。这些数据库有自己的表,并链接到此驱动器中其他数据库的其他表。由于查询是通过网络运行的,因此需要一段时间才能完成。有没有办法我可以创建一个选项,将所需的对象复制到本地文件夹运行查询,然后将结果带回网络中的原始数据库?

1 个答案:

答案 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

注意:

  • 这也会更新对代码模块的引用 - 如果您不需要,可以删除这些行
  • 您可能需要针对您的具体情况调整功能 - 在我的情况下,我所有的链接表来自一个名为" Common Tables"的数据库,我重新链接该数据库中的所有内容。您的确切要求可能会有所不同,但这可能会为您提供一个开始的地方
  • 每年我翻阅数据库时这也非常方便 - 我只是更新链接表源(从2016年到2017年)并重新运行宏

附加说明 - 正如上面的Hynek Bernard评论的那样,版本控制和多用户访问是很重要的考虑因素。在我的情况下,当我使用本地副本时,我可以控制其他人正在使用数据库。如果您拥有SharePoint或类似内容,则另一个选项是将其用作网络上的数据库存储库,并使用签出和签入功能进行控制。您仍然需要获取下载数据位置的正确链接。