References in your application provide library code that can be reused. Whether it's VBA code in another database that is being used as a library, a separate DLL, or ActiveX control, you may need a way to determine whether a reference is missing and subsequently update the reference. Missing references can cause expressions in the application to break.
To determine whether a reference is missing, check the IsBroken property of the Reference object, as shown in the following code. The Access Application object includes a property called BrokenReference that can be used as an optimization when iterating through references. This property returns True if there is a broken reference in the database. Check this property first to determine whether you need to iterate.
The following code shows you how to iterate through and update a reference to another Access databases. This code includes a call to the InstallFromAttachment method shown in the previous example.
Create a new standard module and add the following routine:
Public Function EnsureReferences() As Boolean Dim ref As Access.Reference Dim stFile As String Dim stPath As String Dim stName As String Dim objInstaller As Installer
Before we iterate through the references, let's check the BrokenReference property:
' if there are no missing references, return If (Not Application.BrokenReference) Then EnsureReferences = True Exit Function End If
If there are missing references, create a new instance of the Installer class.
' create the installer instance Set objInstaller = New Installer
Begin a loop to iterate through the References collection. We'll check the IsBroken property of the Reference object to determine whether we need to take an action.
' iterate through references For Each ref In Access.Application.References If (ref.IsBroken) Then ' save the file information stFile = VBA.Mid(ref.FullPath, VBA.InStrRev(ref.FullPath, "\") + 1) stPath = Access.Application.CurrentProject.Path stName = VBA.Left(stFile, VBA.InStr(stFile, ".") - 1)
After saving some information about the reference, remove it.
' remove the reference Access.Application.References.Remove ref
Our sample database contains a copy of the library database so we'll install it using the InstallFromAttachment code shown earlier. We'll create the library database in the next section.
' install it from the attachment field objInstaller.InstallFromAttachment stName, stPath
Next, we'll re-add the reference using the AddFromFile method and exit the routine.
' re-add the reference Access.Application.References.AddFromFile stPath & "\" & stFile End If Next ' compile If (Not Access.Application.IsCompiled) Then Access.Application.RunCommand acCmdCompileAllModules End If ' cleanup Set objInstaller = Nothing ' return EnsureReferences = True End Function
In this tutorial:
- Creating an Automated Build
- Design the Form
- Retrieving Information from the Source Database
- Building the Application
- Creating the Target Database
- Set Build Properties on the Target Database
- Setting Build Properties on the Source Database
- Deleting Data from Tables
- Calculating the Version Number
- Handling Application Dependencies
- Updating References
- Testing Reference Fix-Up
- Late Binding
- Licensing Your Applications
- Number of Records
- Restricting the Number of Times an Application is Launched
- Registering an Application
- Creating a Registration Web Service
- Validate the Registration Using the Web Service
- Miscellaneous Deployment Scenarios
- Create the Client Application
- Testing the Versioning Server
- Re-Linking Tables Automatically
- Programmatically Creating DSNs
- Creating a User DSN
- Ensuring an Application Runs Locally