How To Have Access VBA Link Tables Programmatically

This table relinking procedure is a really good example of how to use VBA to link your tables programmatically, and how to have MS Access refresh linked tables automatically.

It allows re-linking all tables to a selected drive source (the folder the backend database is in).

In this example, all of the tables that need to be relinked are in the “LinkTables” table, and the backend database is in the “C:\Interface\20180314” folder:

IMPORTANT: All Backend databases must reside in the same path, and name of file listed in table. If the tables are not in the same backend database, then the code needs to be modified.

I am interacting with this procedure from a form that looks like this:

Here’s the code for the form:

Private Sub btnLinkTables_Click()

     RefreshLink "C", Me.txtBackendPath
     
End Sub

Private Sub Form_Load()
    Me.txtBackendPath = "C:\Interface\backend"
    
End Sub

Here’s the code of how to call the “RefreshLink” procedure:


Option Compare Database

Public Sub RefreshLink(BackendDrive, BackendPath)

    Dim strSourceDatabase As String
    Dim strSourceName As String
    Dim strLocalName As String
    Dim strSQL As String
    Dim strDBName As String
    Dim rs As Recordset
        
    Dim intPos As Integer
    Dim DriveLetter As String
    Dim FullPath As String
    Dim BlockName As String
    
    DoCmd.Hourglass False
    
    DriveLetter = BackendDrive '"\\jlp-fs01\SB2\"
    
    strSQL = "SELECT SourceTableName, DestinationTableName, TableGroup, DateAdded, BackendDatabase, BackendDatabasePath, NetworkOnly FROM LinkedTables"
    
    Set rst = CurrentDb.OpenRecordset(strSQL)
    rst.MoveFirst
    
    Do Until rst.EOF
        strSourceName = rst.Fields("SourceTableName")
        strLocalName = rst.Fields("DestinationTableName")
        strBlockName = rst.Fields("TableGroup")
        strDBName = rst.Fields("BackendDatabase")
        strSourceDatabase = BackendPath & "\" & strDBName
        
        If Relink(strSourceName, strSourceDatabase, strLocalName, strLocalName) = False Then
            Set rst = Nothing
            Exit Sub
        Else
            'Provide user info on screen
            Forms![frmSystemConfiguration].lblStatus.caption = "Linking " & BlockName & ": " & strSourceName
            DoEvents
        End If
    
        rst.MoveNext
    Loop
    Set rst = Nothing
    
    'Tell the user the relink is complete
    Forms![frmSystemConfiguration].lblStatus.caption = "Linking tables now complete."
    DoEvents
        
 
    DoCmd.Hourglass False

End Sub

Function Relink(strTableName As String, strSourceDatabase As String, strSourceName As String, strLocalName As String) As Boolean
    On Error GoTo DoLink_Error:
    
    Dim dbs As dao.Database
    
    Relink = True
    
    'Open the backend database
    Set dbs = DBEngine.OpenDatabase(strSourceDatabase, False, False, ";pwd=abc")
    
    'Delete the table, if it exists
    CurrentDb.TableDefs.Delete strTableName
    Debug.Print "DELETE: " & strTableName
    CurrentDb.TableDefs.Refresh
        
    'Link the table
    DoCmd.SetWarnings False
    DoCmd.TransferDatabase acLink, "Microsoft Access", strSourceDatabase, acTable, strSourceName, strLocalName, False
    DoCmd.SetWarnings True
        
    Set dbs = Nothing
    Exit Function
    
DoLink_Error:
    Select Case Err.Number
        Case 3011
            MsgBox "Try Linking Again." & vbCrLf & Err.Description, vbCritical, APP_NAME
            Relink = False
            Exit Function
        Case Else
            Resume Next
    End Select
 
End Function

Here are the Front End and the Backend databases for you to practice with (Make sure your path is correct):

Here is the front end:
How To Have Access vba link tables programmatically.accdb

Here is the backend database:

Air.accdb

Let me know if you have any questions.






By the way, if you got or are getting value from the VBA information, please give me a tip, thanks!


These posts may help answer your question too...

How To Parse A Flat File In Excel VBA

In another post I demonstrated how to access a file on your computer using the MS Office Library. Here it is if you don’t know what I’m talking about. In this post, I am going to show you how to access the file and load it into your spreadsheet. I will do the same thing […]

How can I interact with other Office applications (Excel) using VBA in Access?

Need to write your Access data or query to an Excel file? Here is the how to do it: Most people are familiar with Excel and know how to use it well (enough), and when you start talking about Access, they get scared off, and don’t know what to do anymore. Well, here you are […]

How To Generate A XML File With Access VBA

XML is used to structure your data. You can send a CSV file to another person, but using XML, you can structure your data in a more elegant format, and get very specific about your fields, and what data is contained within your tags (your field names). This is different than a basic CSV file […]

Mouse Click Counter On Access Form

This post will demonstrate how you can count the number of clicks on your button in a certain time frame. It will function like a game . Here is the database form all in one: Option Compare Database Public m_dteStartTime As Date Public m_dteStopTime As Date Private Sub btnClicker_Click() Dim intValue As Integer Dim rst […]

Previous Post

How To Extract Data From Outlook To Access With VBA

Next Post

MS Access Subform Navigation Buttons