Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使用指向不同驱动器号的链接表分发前端_Vba_Ms Access_Networking - Fatal编程技术网

Vba 如何使用指向不同驱动器号的链接表分发前端

Vba 如何使用指向不同驱动器号的链接表分发前端,vba,ms-access,networking,Vba,Ms Access,Networking,我有一个问题,我很难给它一个合适的标题。我需要将前端分配到我们广域网内的多个位置。后端表将位于每个人都可以访问的特定驱动器上 我遇到的问题是,并不是每个人都有包含映射到同一驱动器号的后端的驱动器。似乎Access通过路径(即H:\tables\backend)而不是服务器名称(wvadrive1\tables\backend)引用后端的位置 我知道我可以通过VB代码引用服务器名而不是驱动器名,但当通过链接表管理器/外部数据设置链接表时,access会根据驱动器号对其进行映射 是否有一个简单的解决

我有一个问题,我很难给它一个合适的标题。我需要将前端分配到我们广域网内的多个位置。后端表将位于每个人都可以访问的特定驱动器上

我遇到的问题是,并不是每个人都有包含映射到同一驱动器号的后端的驱动器。似乎Access通过路径(即H:\tables\backend)而不是服务器名称(wvadrive1\tables\backend)引用后端的位置

我知道我可以通过VB代码引用服务器名而不是驱动器名,但当通过链接表管理器/外部数据设置链接表时,access会根据驱动器号对其进行映射

是否有一个简单的解决方案来确保我信任的每个人都能正确链接他们的表?我可以在第一次打开数据库时运行一些VBA来映射链接表吗


谢谢

使用VBA更改
TableDef.Connect
属性以指向文件共享(UNC路径),而不是驱动器号

在最简单的情况下,所有用户都可以使用相同的UNC路径,并且所有链接表都位于同一个db文件中

Const cstrUncPath As String = ";DATABASE=\\Server\ShareName\AnotherFolder\YourDb.mdb"
Dim db As DAO.database
Dim tdf As DAO.TableDef

Set db = CurrentDb
For Each tdf In db.TableDefs
    If tdf.Connect Like ";DATABASE=*" Then
        tdf.Connect = cstrUncPath
        tdf.RefreshLink
    End If
Next
Set tdf = Nothing
Set db = Nothing
在将db文件分发给用户之前,在db文件上执行此操作。如果需要,可以在用户的本地db文件副本中运行类似的过程

请注意,代码将仅更改访问表的链接。指向其他数据源(ODBC、Excel、文本文件等)的链接将被忽略


如果需要链接到多个Access后端数据库中的表,请使用包含数据库路径和表/链接名称的单独表。然后,您可以将该表作为记录集打开,并在其中循环,以根据需要更改/创建链接。

使用VBA更改TableDef。将属性连接到指向共享(UNC路径)而不是驱动器号。只需将其放入autoexec或第一个表单的加载事件中即可?我想我会选择丑陋的解决方案,只是为每个表手动执行tabledef.connect,而不是尝试迭代和做一些漂亮的事情。不,因为所有用户的UNC路径都是相同的,所以在给他们db文件之前先执行。哦,是的,duh。因此,在设置tabledef.connect属性后,它将保持不变,并且我不必每次打开它时都这样做?是的,到SQL server的迁移正在进行中,但现在,我们只是要让它在WAN上工作。我希望它会很慢,但它在WAN上的使用不会比LAN多,只是在特殊情况下。它们并不都链接到同一个后端,这就是为什么我可能会避免迭代。我将按表手动执行此操作-这是一个很好的起点,谢谢。在这种情况下,您可以从一个单独的表中驱动类似的代码,其中包括表名和db\u路径。