1

我们如何在路径尚不存在的情况下设置链接表?

我们需要在 Access 中设置一个链接表,以便最终在没有安装 MS Access 的客户环境中使用(Access 数据库只是通过 Jet 用作后端)。

我们可以在客户站点上使用 Jet & DDL 在他们的 .mdb 中创建/编辑/删除表,但据我所知,您无法使用 DDL 创建链接表。

理论上,我们可以在这里创建链接表(我们可以访问)并使用 VBA 指定“无效”路径,如下所示(假设乞力马扎罗山是我们网络上不存在的客户服务器):

Function SetLinkedTablePath(tableName As String)
    Dim cdb As DAO.Database
    Set cdb = CurrentDb
    cdb.TableDefs(tableName).Connect = ";DATABASE=\\Kilimanjaro\Foo-Data.mdb"
    cdb.TableDefs(tableName).RefreshLink
    Set cdb = Nothing
End Function

但是,该.RefreshLink线路尝试验证路径,因此在我们的网络上失败。

如果我们注释掉该.RefreshLink行并运行它,它会执行得很好,但是在 Access 中检查 Linked Table Manager 并没有采用新路径。

有什么解决办法吗?我们不希望使用映射驱动器。

4

2 回答 2

1

最后,我们在网络上使用了一个备用虚拟机并临时将其重命名以匹配我们客户的服务器(\\Kilimanjaro例如调用它)。然后我们可以毫无问题地创建链接表。

这是不令人满意和不优雅的。但我会接受这个答案,因为这是我们的解决方案,但如果有人想出一个更巧妙的技巧,我很想听听。

于 2014-02-19T10:00:13.877 回答
1

如果您没有Kilimanjaro在本地网络上命名的实际服务器,那么您可以hosts在您的计算机上编辑该文件以“欺骗”它以为有一个。我刚刚在 Access 2010 上尝试过,它对我有用:

我以“管理员身份”打开了 Windows 命令提示符并发出了命令

notepad C:\Windows\System32\drivers\etc\hosts

我像这样在文件末尾添加了一行

192.168.1.109   Kilimanjaro

我的本地测试服务器的 IPv4 地址在哪里192.168.1.109(其真实名称有所不同)。我保存了更改并退出了记事本。

然后在 Access 中,我能够调整.Connect链接表的属性,使其指向\\Kilimanjaro如下:

Dim cdb As DAO.Database, tbd As DAO.TableDef
Set cdb = CurrentDb
Set tbd = cdb.TableDefs("TableX")
tbd.Connect = ";DATABASE=\\Kilimanjaro\Public\Database1.accdb"
tbd.RefreshLink
Set tbd = Nothing
Set cdb = Nothing

由于确实有一个Database1.accdb在该 UNC 路径上命名的文件,Access 没有问题,我可以像往常一样在数据表视图中打开链接表。

于 2014-02-12T22:06:29.200 回答