Links in einer Microsoft Access Runtime-Anwendung aktualisieren


Zusammenfassung


In einer Anwendung zur Laufzeit müssen die Front-End- und Back-End-Datenbanken im gleichen Ordner gespeichert werden. Auch wenn Sie den Standardinstallationspfad der Back-End-Datenbank, z. B. $AppPath\Folder1, ändern können besteht keine Möglichkeit für den Zugriff auf die Links in der Front-End-aktualisieren entsprechend den neuen Installationsspeicherort.

Eine Möglichkeit zum Umgehen dieses Verhaltens ist die Links mit ActiveX Erweiterbarkeit Objekte (ADOX) nach der Installation der Anwendung programmgesteuert aktualisiert. Folgendes ist eine Darstellung der Implementierung dieser Technik. Beachten Sie, dass vorausgesetzt, dass die Back-End-Datenbanken in Unterordnern unterhalb der Front-End-Datenbank gespeichert sind.

Weitere Informationen


  1. Stellen Sie sicher, dass Sie die neueste Version von der Microsoft Data Access Components (MDAC) auf Ihrem Computer installiert haben. MDAC finden auf der folgenden Microsoft-Website:
  2. Legen Sie einen Verweis auf Microsoft ADO Ext 2.5 (oder höher) für DDL and Security.
  3. Erstellen Sie eine neue Datenbank, und nennen Sie sie FrontEnd.mdb.
  4. FrontEnd.mdb Kunden und Mitarbeiter Formulare aus der Beispieldatenbank "Nordwind.mdb" importieren.
  5. Erstellen Sie eine neue Datenbank und Unterordner des Ordners, in dem die Datei FrontEnd.mdb befindet, z. B. Folder1\Backend1.mdb.
  6. Backend1.mdb importieren Sie die Customer-Tabelle aus der Datenbank Northwind.mdb.
  7. Erstellen Sie eine neue Datenbank und Unterordner des Ordners, in dem die Datei FrontEnd.mdb befindet, z. B. Folder2\Backend2.mdb.
  8. Backend2.mdb importieren Sie die Employee-Tabelle aus der Datenbank Northwind.mdb.
  9. Öffnen Sie die Datenbank FrontEnd.mdb, und erstellen Sie ein neues Modul. Fügen Sie im Modul den folgenden Code:
    Option Compare DatabaseOption Explicit

    Private Declare Function apiSearchTreeForFile Lib "ImageHlp.dll" Alias _
    "SearchTreeForFile" (ByVal lpRoot As String, ByVal lpInPath _
    As String, ByVal lpOutPath As String) As Long


    Function RefreshLinks()
    On Error GoTo ErrorHandler


    Dim objCat As New ADOX.Catalog 'Define the ADOX Catalog Object
    Dim objTbl As ADOX.Table 'Define the ADOX Table Object

    Dim strSearchFolder As String 'Folder to Search in.
    Dim strFilename As String 'Db Name of the Linked Table
    Dim strFullName As String 'Path & DB Name of the Linked Table.
    Dim strSearchFile As String 'The new path of the database.

    Dim blnTablesNotLinked As Boolean 'Determines if links are valid

    'Open the catalog
    objCat.ActiveConnection = CurrentProject.Connection

    'Loop through the table collection and refresh the linked tables.
    For Each objTbl In objCat.Tables

    ' Check to make sure the table is a linked table.
    If objTbl.Type = "LINK" Then
    strFullName = objTbl.Properties("Jet OLEDB:Link Datasource")
    strFilename = Mid(strFullName, InStrRev(strFullName, "\", _
    Len(strFullName)) + 1, Len(strFullName))
    strSearchFolder = CurrentProject.Path
    'The following line of code attempts to refresh the link.
    'If the source cannot be found an error is generated.
    'Please note that this code only checks one table to determine
    'whether or not the links are valid.
    objTbl.Properties("Jet OLEDB:Link Datasource") = strFullName

    If blnTablesNotLinked = False Then
    Exit Function
    Else
    'Set the search path to the path of the current project.
    'The assumption is that the linked tables are located in subfolders.
    strSearchFile = SearchFile(strFilename, strSearchFolder)
    objTbl.Properties("Jet OLEDB:Link Datasource") = strSearchFile
    End If
    End If
    Next

    MsgBox "The links were successfully refreshed!!! "

    ExitHandler:
    Exit Function

    ErrorHandler:
    Select Case Err.Number
    Case -2147467259
    blnTablesNotLinked = True
    Resume Next
    Case Else
    MsgBox Err.Description & " " & Err.Number
    Resume ExitHandler
    End Select
    End Function

    Function SearchFile(ByVal strFilename As String, _
    ByVal strSearchPath As String) As String
    'Search the folder for first occurrence of the source databases.
    Dim strBuffer As String
    Dim lngResult As Long
    SearchFile = ""
    strBuffer = String$(1024, 0)
    lngResult = apiSearchTreeForFile(strSearchPath, strFilename, strBuffer)
    If lngResult <> 0 Then
    If InStr(strBuffer, vbNullChar) > 0 Then
    SearchFile = Left$(strBuffer, InStr(strBuffer, vbNullChar) - 1)
    End If
    End If
    End Function

    Diese Funktion überprüft die erste verknüpfte Tabelle in der Datenbank bestimmt, ob Hyperlinks gültig sind. Wenn die Hyperlinks nicht gültig sind, wird die Funktion für die Datenbank sucht und Links aktualisiert.
  10. Erstellen Sie ein neues Makro mit folgenden Eigenschaften und nennen Sie AutoExec:
       Action: RunCode
    Function Name: RefreshLinks()

    Action: OpenForm
    Form Name: Customers

    Action: OpenForm
    Form Name: Employees

    Beachten Sie, dass Sie diese Funktion das Open-Ereignis von einem ausgeblendeten Formular aufrufen können.
  11. Erstellen Sie das Paket für die Anwendung zur Laufzeit. Beachten Sie die jeweiligen Installationsorte "Folder1" und "Ordner2" hinzu.

    Access 2007 und Access 2003 fügen Sie Back-End-Dateien im Abschnitt "Zusätzliche Dateien hinzu" und geben Sie die entsprechenden Ordnernamen "Folder1" und "Ordner2" in der Spalte Unterordner installieren .

    Access 2002 und Access 2000 fügen Sie hinzu "\Folder1\$ (AppPath)" und "$(AppPath) \Folder2\" auf der Seite der jeweiligen Installationspfade.

  12. Bereitstellen der Anwendung.
Beim Start der Anwendung zufolge eine Sanduhr Links aktualisiert werden. Die Kunden und Mitarbeiter Formulare werden mit gültigen Daten geöffnet.

Referenzen


Weitere Informationen dazu, wie Sie verknüpfte Tabellen aktualisieren, finden im folgenden Artikel der Microsoft Knowledge Base:

209862 wie Back-End-Tabellen mit das Standarddialogfeld-Steuerelement in Access 2000 verknüpfen