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
Ms access 在MS Access(2013)中刷新链接表不起作用_Ms Access_Vba - Fatal编程技术网

Ms access 在MS Access(2013)中刷新链接表不起作用

Ms access 在MS Access(2013)中刷新链接表不起作用,ms-access,vba,Ms Access,Vba,这是我创建的一个接口,用于在IT部门决定更改网络名称或路径时帮助客户端切换数据库链接 我正在努力清理一个被我打乱的常规。它过去工作得很好,但现在它不能刷新,我也不明白为什么 1) 当用户单击“浏览”为数据库选择新路径时,我将此例程称为: Private Sub cmdBrowsePath_Click() Dim strFile As String Dim strPath As String Dim strNewPath As String strFile =

这是我创建的一个接口,用于在IT部门决定更改网络名称或路径时帮助客户端切换数据库链接

我正在努力清理一个被我打乱的常规。它过去工作得很好,但现在它不能刷新,我也不明白为什么

1) 当用户单击“浏览”为数据库选择新路径时,我将此例程称为:

Private Sub cmdBrowsePath_Click()
    Dim strFile As String
    Dim strPath As String
    Dim strNewPath As String


    strFile = GetFilePath("Locate and select the Master Database")

    If strFile <> "" Then


       Me.txtMaster = strFile

       Call ChangeLinkPath("TBL_VERSION_LATEST", Me.txtMaster)

    End If



End Sub
Private Sub-cmdBrowsePath_Click()
作为字符串的Dim strFile
将strPath设置为字符串
作为字符串的暗淡strNewPath
strFile=GetFilePath(“找到并选择主数据库”)
如果是strFile“”,则
Me.txtMaster=strFile
调用ChangeLinkPath(“TBL\U版本\最新版本”,Me.txtMaster)
如果结束
端接头
2) 当选择一个新路径时,我希望链接表自动切换到用户选择的路径-我调用一个名为ChangeLinkPath的例程,我这样调用它:

Public Sub ChangeLinkPath(strLinkName As String, strNewPath As String)

On Error GoTo ChangeLinkPath_Err

    Dim db As DAO.Database
    Dim TDF As DAO.TableDef

    Set db = CurrentDb
    Set TDF = db.TableDefs(strLinkName)

    If (Mid(TDF.Name, 1, 4) <> "MSys" And Mid(TDF.Name, 1, 4) <> "~TMP") Then
        Debug.Print "Current link: " & TDF.Connect

        TDF.Connect = ";DATABASE=" & strNewPath
        TDF.RefreshLink

        db.TableDefs.Refresh

        Debug.Print "AFTER REFRESHING: " & TDF.Connect

    End If

    Set TDF = Nothing

ChangeLinkPath_Err:

Select Case Err.Number

Case 3011
    MsgBox "'" & strLinkName & "' is NOT in this engine. Make sure you point to an engine that has the same tables or DELETE the linked table if you no longer wish to refresh it.  The original link has not been changed.", vbCritical, "Skipping - " & strLinkName


End Select

ChangeLinkPath_Exit:

Set db = Nothing
Set TDF = Nothing

End Sub
Public子ChangeLinkPath(strLinkName作为字符串,strNewPath作为字符串)
错误转到ChangeLinkPath\u错误
Dim数据库作为DAO.Database
将TDF调暗为DAO.TableDef
Set db=CurrentDb
设置TDF=db.TableDefs(strLinkName)
如果(Mid(TDF.Name,1,4)“MSys”和Mid(TDF.Name,1,4)”~TMP),那么
调试。打印“当前链接:&TDF.Connect”
TDF.Connect=“;DATABASE=“&strNewPath
刷新链接
db.TableDefs.Refresh
刷新后调试.Print:&TDF.Connect
如果结束
设置TDF=无
更改链接路径错误:
选择案例错误编号
案件3011
MsgBox“'”&strLinkName&“”不在此引擎中。请确保指向具有相同表的引擎,或者如果不再希望刷新链接表,请删除该链接表。原始链接尚未更改。“,vbCritical,“跳过-”&strLinkName
结束选择
ChangeLinkPath\u退出:
Set db=Nothing
设置TDF=无
端接头
除了最重要的部分-更改链接路径外,一切都正常

我在选择新路径后检查链接,它只在文本框中更改,而不在链接本身中更改。当我将鼠标悬停在链接上时,它仍然具有旧路径。我错过了什么


如果我知道的话,我可以让这个基本部分用于更改任何链接路径。

所以刷新后您的
Debug.Print:“
显示旧的连接字符串?嗯。试着删除db.TableDefs.Refresh,这应该是不必要的。实际上,刷新后的Debug.Print甚至不会发生。刷新是我试图看到代码实际上通过了这一点。它似乎只是跳过了它。所以我转到数据库窗口,当我将鼠标悬停在链接上时,我在数据库窗口中看到了旧的链接。我尝试全部刷新并重新启动数据库。似乎什么都不起作用。然后我建议在您的错误处理程序中使用
Case Else Msgbox Err.Description
。我修复了路径,现在链接终于更改了,但仍然得到一个空白错误。是因为没有错误号吗?我决定将err.number设为“0-”,因为当前的解决方案似乎工作正常。如果有人能告诉我需要做些什么来清理“0-”err.number,我很乐意修复它。