In der letzten Ausgabe haben Sie erfahren, wie einfach es ist, die Basis für die Verwendung von temporären Tabellen zu schaffen. Durch Parameter und ein paar Zeilen Code erstellen Sie eine Datenbank, die bei jedem Start Ihrer Anwendung automatisch erzeugt wird. Dieser Artikel soll Ihnen nun die Anwendung temporärer Datenbanken in der Praxis demonstrieren.
Der Hintergrund für den Einsatz einer temporären Datenbank ist, in Frontend-Backend-Szenarios oft verwendete, aber selten geänderte Daten – etwa zum Füllen von Kombinationsfeldern – für die Dauer einer Sitzung auf den lokalen Rechner zu kopieren. Dabei soll nicht nur eine temporäre Tabelle, sondern direkt eine temporäre Datenbank helfen, weil dies das Aufblähen des eigentlichen Frontends verringert.
Im Beitrag Temporäre Datenbanken (Shortlink 461) haben Sie erfahren, wie Sie mit einem geeigneten Formular die dafür anzulegende temporäre Datenbank konfigurieren. Der vorliegende Beitrag zeigt, wie Sie diese Lösung in der Praxis einsetzen und die Tabellen der temporären Datenbank mit den gewünschten Daten füllen.
Anwendungsgebiet “Referenztabellen”
Die Daten in Kombinations- oder Listenfeldern zur Anzeige von Kundennamen, Zahlungsbedingungen etc. holt Access normalerweise bei jedem öffnen des Formulars aus den Tabellen des Backends.
Warum also nicht, um die Belastung des Backends zu verringern, diese “statischen” Daten einfach beim Start Ihrer Anwendung in den Pool der temporären Datenbank überführen und anschließend die Listenfelder durch die Einträge aus den Tabelle der temporären Datenbank füllen
Zur Demonstration dieser Vorgehensweise soll das nachfolgende Beispiel dienen: Das Backend enthält eine Tabelle mit Bundesländern, Kreisstädten und Gemeinden. Die Struktur dieser Tabelle entnehmen Sie Tab. 1.
Feldname |
Datentyp |
Länge |
Tab. 1: Struktur der Datenquelle |
||
Das zu füllende Kombinationsfeld benötigen Sie zur Auswahl des Bundeslandes bei der Erfassung einer Adresse.
Konfiguration der temporären Datenbank
Starten Sie den Konfigurator (frm_app_Konfigurator) und geben Sie dort den Datenbankpfad und den Namen der zu erstellenden temporären Datenbank an (siehe Bild 1). Dann müssen Sie die temporäre Tabelle namens tbl_ref_Bundeslaender im Konfigurator anlegen (genaue Informationen zum Konfigurator siehe Shortlink 461).

Bild 1: Konfigurieren Sie die erste Tabelle für den Gebrauch als Referenztabelle.
Haben Sie den Namen festgelegt, müssen Sie noch die Felder für die neue Tabelle bestimmen. Dazu klicken Sie auf das Register Felder und wählen die Tabelle tbl_ref_Bundeslaender aus dem Kombinationsfeld aus (siehe Bild 2).

Bild 2: Konfiguration der benötigten Felder für die Referenztabelle
tbl_ref_Bundeslaender
Die Feldgröße der Felder für die temporäre Tabelle leiten sich von der Struktur der Ausgangsdatenquelle ab. Wie in Tab. 1 beschrieben, enthält die temporäre Tabelle lediglich zwei Felder vom Datentyp Text mit den passenden Feldgrößen.
Zu guter Letzt legen Sie noch zwei Indizes für die temporäre Tabelle an (siehe Bild 3).

Bild 3: Indizes der temporären Tabelle
Der Index PrimaryKey verhindert redundante Daten im Primärschlüssel während der zweite Index SortOrder dazu verwendet wird, die Ausgabe der Bundesländer in sortierter Form zu beschleunigen.
Lassen Sie, nachdem Sie die Konfiguration fertig gestellt haben, die temporäre Datenbank für einen ersten Testlauf erstellen. Sollten keine Fehler auftauchen, werden Sie über den Erfolg informiert und die verknüpfte Tabelle erscheint im Datenbankfenster.
Wie kommen die Daten in die Tabelle
Nun gut – die Datenbank und damit auch die konfigurierte Tabelle wurden erfolgreich erstellt. Aber wie bekommen Sie nun die Daten aus dem Backend in diese Tabelle Ziel ist es, alle Bundesländer aus der Tabelle tbl_app_LaenderKreiseGemeinden der Backend-Datenbank in die temporäre Tabelle zu transferieren. Bundesländer sind diejenigen Datensätze mit dem Feldinhalt L im Feld Type (siehe Bild 4).

Bild 4: Bundesländer sind durch eine eindeutige Typen-kennzeichnung charakterisiert.
Datenübertragung mittels DAO und JET
Die erste Möglichkeit besteht darin, die Quelldaten in einem RecordSet zu speichern und zu durchlaufen. Jeder Datensatz, der dem Kriterium für die temporäre Datenquelle entspricht, wird anschließend mittels VBA-Code in diese Tabelle eingetragen (s. Listing 1).
Listing 1: Import von Daten in die temporäre Tabelle via DAO
Private Sub StartDAOImport()
On Error GoTo ErrorHandler:
Call DoCmd.Hourglass(True)
Set db = DBEngine(0)(0)
Set rstSource = db.OpenRecordset("tbl_app_LaenderKreiseGemeinden", dbOpenForwardOnly)
Set rstTarget = db.OpenRecordset("tbl_ref_Bundeslaender", dbOpenDynaset)
While Not rstSource.EOF
If rstSource!Type = "L" Then
rstTarget.AddNew
rstTarget!Schluessel = rstSource!Gemeindeschluessel
rstTarget!BundesLand = rstSource!RegionName
rstTarget.Update
End If
rstSource.MoveNext
Wend
ExitCode:
On Error Resume Next
Set rstSource = Nothing
Set rstTarget = Nothing
Set db = Nothing
Call DoCmd.Hourglass(False)
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 3022: Resume Next
Case Else: MsgBox Err.Description, vbInformation, "Fehler: " & Err.Number
End Select
Resume ExitCode
End Sub
Im obigen Code werden zwei Recordsets initialisiert und geöffnet. Das Recordset rstSource enthält die Datenmenge der zu übertragenden Daten, während das Recordset rstTarget die temporäre Tabelle tmp_app_BundesLaender abbildet.
In einer kopfgesteuerten Schleife wird im Anschluss die Datenquelle durchlaufen. Sobald die Bedingung [Type] = “L” erfüllt ist, versucht die Routine, den gefundenen Datensatz in die Zieltabelle einzutragen. Da Sie nicht ausschließen können, dass eventuell bereits ein Datensatz mit gleichem Primärschlüsseleintrag in der Zieltabelle vorhanden ist, wird in der Fehlerroutine auf eine mögliche Schlüsselverletzung (Fehler 3022) reagiert und die Quelle einfach weiter durchlaufen.
Datenübertragung mittels SQL
Eine elegantere Lösung stellt die Verwendung einer passenden gespeicherten SQL-Abfrage für das Füllen der Zieltabelle dar.