我们如何在路径尚不存在的地方设置链接表?
我们需要在 Access 中设置一个链接表,以便最终在未安装 MS Access 的客户环境中使用(Access 数据库只是通过 Jet 用作后端)。
我们可以在客户的网站上使用Jet&DDL在他们的.mdb中创建/编辑/删除表,但据我所知,您无法使用DDL创建链接表。
理论上,我们可以在这里创建链接表(我们有 Access 的地方)并使用 VBA 指定"无效"路径,如下所示(假设乞力马扎罗山是客户的服务器,我们的网络上不存在):
Function SetLinkedTablePath(tableName As String)
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.TableDefs(tableName).Connect = ";DATABASE=\KilimanjaroFoo-Data.mdb"
cdb.TableDefs(tableName).RefreshLink
Set cdb = Nothing
End Function
但是,.RefreshLink
行尝试验证路径,因此在我们的网络上失败。
如果我们注释掉.RefreshLink
行并运行它,它可以很好地执行,但是在 Access 中检查链接表管理器的新路径尚未采用。
有什么解决方案吗?我们宁愿不使用映射驱动器。
如果您的本地网络上没有名为 Kilimanjaro
的实际服务器,那么您可以编辑计算机上的hosts
文件以"愚弄"它,使其认为有一个。我刚刚在Access 2010上尝试了这个,它对我有用:
我"以管理员身份"打开了 Windows 命令提示符并发出了命令
notepad C:WindowsSystem32driversetchosts
我在文件末尾添加了一行,如下所示
192.168.1.109 Kilimanjaro
其中192.168.1.109
是我的本地测试服务器的 IPv4 地址(其真实名称不同)。我保存了更改并退出了记事本。
然后在 Access 中,我能够调整链接表的 .Connect
属性以指向\Kilimanjaro
如下所示:
Dim cdb As DAO.Database, tbd As DAO.TableDef
Set cdb = CurrentDb
Set tbd = cdb.TableDefs("TableX")
tbd.Connect = ";DATABASE=\KilimanjaroPublicDatabase1.accdb"
tbd.RefreshLink
Set tbd = Nothing
Set cdb = Nothing
由于在该 UNC 路径上确实有一个名为 Database1.accdb
的文件,因此 Access 没有问题,我可以像往常一样在数据表视图中打开链接表。
我们在网络上取了一个备用虚拟机,并临时重命名它以匹配我们客户端的服务器(例如,将其称为\Kilimanjaro
)。然后我们可以毫无问题地创建链接表。
这是不令人满意和不优雅的。但我会接受这个答案,因为它是我们的解决方案,但如果有人想出一个更巧妙的技巧,我很想听听。