重新链接数据库表:访问,VBA(Relinking database tables: Access,

2019-09-02 03:50发布

我有重新链接数据库中的所有baed他们是否是一个链接表的表的过程。 目前,这被设置为它设置AutoExec宏它调用函数中自动运行。

代码工作只有当我关闭数据库,并重新打开它 。 我知道,这是因为这需要做新的链接才能生效,但反正是有解决这个? 或者,做不到这一点,那会是更好地使VBA代码关闭数据库,并重新打开它?

在此先感谢您的反馈

PS下面的代码,如果你很好奇:

'*******************************************************************
'*  This module refreshes the links to any linked tables  *
'*******************************************************************


'Procedure to relink tables from the Common Access Database
Public Function RefreshTableLinks() As String

On Error GoTo ErrHandler
    Dim strEnvironment As String
    strEnvironment = GetEnvironment

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef

    Dim strCon As String
    Dim strBackEnd As String
    Dim strMsg As String

    Dim intErrorCount As Integer

    Set db = CurrentDb

    'Loop through the TableDefs Collection.
    For Each tdf In db.TableDefs

            'Verify the table is a linked table.
            If Left$(tdf.Connect, 10) = ";DATABASE=" Then

                'Get the existing Connection String.
                strCon = Nz(tdf.Connect, "")

                'Get the name of the back-end database using String Functions.
                strBackEnd = Right$(strCon, (Len(strCon) - (InStrRev(strCon, "\") - 1)))

                'Debug.Print strBackEnd

                'Verify we have a value for the back-end
                If Len(strBackEnd & "") > 0 Then

                    'Set a reference to the TableDef Object.
                    Set tdf = db.TableDefs(tdf.Name)

                    If strBackEnd = "\Common Shares_Data.mdb" Or strBackEnd = "\Adverse Events.mdb" Then
                        'Build the new Connection Property Value - below needs to be changed to a constant
                        tdf.Connect = ";DATABASE=" & strEnvironment & strBackEnd
                    Else
                        tdf.Connect = ";DATABASE=" & CurrentProject.Path & strBackEnd

                    End If

                    'Refresh the table links
                    tdf.RefreshLink

                End If

            End If

    Next tdf

ErrHandler:

 If Err.Number <> 0 Then

    'Create a message box with the error number and description
    MsgBox ("Error Number: " & Err.Number & vbCrLf & _
            "Error Description: " & Err.Description & vbCrLf)

End If

End Function

编辑

从Gords意见继我已经加入了宏AutoExec调用下面的代码的方法。 任何人看到这个问题?

Action: RunCode
Function Name: RefreshTableLinks() 

Answer 1:

在这种情况下最常见的错误是忘记.RefreshLink的的TableDef,但你已经这样做。 我刚刚测试了以下VBA代码,切换两个名为访问后端文件之间[Products_linked]链接表: Products_EN.accdb (英文)和Products_FR.accdb (法国)。 如果我运行VBA代码,然后立即打开链接的表我看到的变化已经发生; 我没有关闭并重新打开数据库。

Function ToggleLinkTest()
Dim cdb As DAO.Database, tbd As DAO.TableDef
Set cdb = CurrentDb
Set tbd = cdb.TableDefs("Products_linked")
If tbd.Connect Like "*_EN*" Then
    tbd.Connect = Replace(tbd.Connect, "_EN", "_FR", 1, 1, vbBinaryCompare)
Else
    tbd.Connect = Replace(tbd.Connect, "_FR", "_EN", 1, 1, vbBinaryCompare)
End If
tbd.RefreshLink
Set tbd = Nothing
Set cdb = Nothing
End Function

我甚至测试呼叫从一个AutoExec宏代码,它也似乎按预期方式工作。

有一两件事你可以尝试将来电db.TableDefs.Refresh就在你的程序结束,看看有没有什么帮助。

编辑

这里的问题是,该数据库已经在其“应用程序选项”中指定的“显示表”,并在形式显然AutoExec宏运行之前自动打开。 移动函数调用的重新链接代码到Form_Load事件处理程序为“启动形式”似乎是一个可能的修复。



文章来源: Relinking database tables: Access, VBA