Temporäre Datenbanken in der Praxis

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 (s. Abb. 1). Dann müssen Sie die temporäre Tabelle namens tbl_ref_Bundeslaender im Konfigurator anlegen (genaue Informationen zum Konfigurator siehe Shortlink 461).

pic001.tif

Abb. 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 (s. Abb. 2).

pic002.tif

Abb. 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 (s. Abb. 3).

pic003.tif

Abb. 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 (s. Abb. 4).

pic004.tif

Abb. 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.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar