我们如何设置路径不存在的链接表?
我们需要在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中的链接表管理器没有采用新路径。
对此有何解决方案?我们不想使用映射驱动器。
答案 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
)。然后我们可以毫无问题地创建链接表。
这是不令人满意和不优雅的。但我会接受这个答案,因为这是我们的解决方案,但如果有人想出一个更整洁的技巧,我很乐意听到它。