在Access中为不存在的路径设置链接表?

时间:2014-02-12 19:14:30

标签: ms-access ddl jet linked-tables

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

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

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

理论上我们可以在这里创建链接表(我们有Access)并使用VBA指定“无效”路径(假设Kilimanjaro是我们网络上不存在的客户服务器):

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中的链接表管理器没有采用新路径。

对此有何解决方案?我们不想使用映射驱动器。

2 个答案:

答案 0 :(得分:1)

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

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

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

我在文件末尾添加了一行,如此

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=\\Kilimanjaro\Public\Database1.accdb"
tbd.RefreshLink
Set tbd = Nothing
Set cdb = Nothing

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

答案 1 :(得分:1)

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

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