Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Sichern Sie das komplette Datenmodell samt Daten in einer externen Datenbank und stellen Sie es bei Bedarf wieder her.

Techniken

Datenmodellierung, DAO

Voraussetzungen

Access 2000 und höher

Beispieldateien

TabellenUndBeziehungenKopieren.mdb

Shortlink

www.access-im-unternehmen.de/804

Tabellen und Beziehungen kopieren

André Minhorst, Duisburg

Während Sie eine Datenbank programmieren, fällt unter Umständen eine ganze Menge Datenmüll an - Datensätze, die beim Test eingegeben werden und die Sie nicht mehr benötigen. Dafür wäre ein Satz realistischer Daten nicht schlecht. Dieser Beitrag zeigt, wie Sie das komplette Datenmodell einer Datenbank in einer zweiten Datenbank vorhalten und diese per Mausklick über die Tabellen der aktuell bearbeiteten Datenbank schreiben - und zwar inklusive Beziehungen.

Wenn Sie Anwendungen programmieren und dabei zu Testzwecken immer wieder neue Beispieldaten in die Formulare eingeben oder auch Daten aus anderen Quellen wie XML-Dokumenten, Excel-Tabellen oder auch aus anderen Datenbanken in die Tabellen spülen, möchten Sie sicher gelegentlich den Urzustand wiederherstellen. Kein Problem: Sie müssen den Urzustand nur zum gewünschten Zeitpunkt in eine externe Tabelle schreiben und diesen bei Bedarf wieder herstellen. Natürlich sollten dabei keine zwischenzeitlichen Änderungen am Datenmodell übersehen werden.

Dieser Beitrag beschreibt eine Lösung, mit der Sie festgelegte Tabellen einer Datenbank und deren Beziehungen in eine externe Datenbank kopieren und wiederherstellen können. Die Benutzeroberfläche dieser Lösung besteht aus dem Formular frmTabellenImportExport (s. Abb. 1). Dieses Formular zeigt beim Öffnen alle Tabellen der aktuellen Datenbank an. Sie können nun durch Markieren der gewünschten Tabellen festlegen, welche Einträge in der Sicherungsdatenbank landen sollen.

pic001.png

Abb. 1: Das Formular zum Festlegen der zu importierenden oder zu exportierenden Tabellen

Mit einem Klick auf die Schaltfläche Sichern öffnen Sie einen Datei öffnen-Dialog zum Auswählen der Zieldatei. Wenn Sie eine neue Sicherungsdatei erstellen möchten, markieren Sie zuvor die Option Neue Datenbank. In diesem Fall wählen Sie im Datei speichern-Dialog Pfad und Name der zu erstellenden Datenbankdatei aus. Wenn Sie die Daten einmal gesichert haben, können Sie diese über die Schaltfläche Wiederherstellen wieder in die aktuell geöffnete Datenbank importieren.

Beachten Sie bitte, dass beim Exportieren wie auch beim Importieren alle Tabellen der Zieldatenbank und deren Beziehungen gelöscht werden.

Funktion der Lösung

Das Formular frmTabellenImportExport zeigt im Listenfeld lstTabellen alle Tabellen der aktuellen Datenbank an, deren Name nicht mit USys..., MSys... oder ~... beginnt. Diese Tabellennamen werden beim ersten Öffnen des Formulars in der Tabelle tblTabellenExportImport gespeichert, und zwar in der Prozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird (s. Listing 1).

Listing 1: Diese Prozedur wird beim Laden des Formulars frmTabellenImportExport ausgelöst.

Private Sub Form_Load()

    Dim db As DAO.Database

    Dim tdf As DAO.TableDef

    Dim rst As DAO.Recordset

    Set db = CurrentDb

    Set rst = db.OpenRecordset("tblTabellenExportImport", dbOpenDynaset)

    Do While Not rst.EOF

        Set tdf = Nothing

        On Error Resume Next

        Set tdf = db.TableDefs(rst!Tabelle)

        On Error GoTo 0

        If tdf Is Nothing Then

            db.Execute "DELETE FROM tblTabellenExportImport WHERE Tabelle = '" _

                & rst!Tabelle & "'", dbFailOnError

        End If

        rst.MoveNext

    Loop

    rst.Close

    For Each tdf In db.TableDefs

        Select Case Left(tdf.Name, 4)

        Case "MSys", "USys", "~***"

        Case Else

        On Error Resume Next

        db.Execute "INSERT INTO tblTabellenExportImport(Tabelle) VALUES('" & tdf.Name & "')", dbFailOnError

        End Select

    Next tdf

    Me!lstTabellen.Requery

    Set rst = db.OpenRecordset("tblTabellenExportImport", dbOpenDynaset)

    Do While Not rst.EOF

        If rst!Export Then

            Me!lstTabellen.Selected(rst.AbsolutePosition) = True

        End If

        rst.MoveNext

    Loop

    rst.Close

    Set rst = Nothing

    Set db = Nothing

    End Sub

Diese Prozedur prüft bei jedem Aufruf des Formulars, ob die in der Tabelle tblTabellenImportExport gespeicherten Tabellennamen noch mit den tatsächlich in der Tabelle vorhandenen Tabellen übereinstimmen, und gleicht diese gegebenenfalls ab.

Dies geschieht in zwei Stufen: Als erstes durchläuft die Prozedur alle Datensätze der Tabelle tblTabellenExportImport, die wie in Abb. 2 aussieht. Sie prüft für jeden Eintrag, ob es noch ein TableDef-Objekt mit dem entsprechenden Namen gibt. Falls nicht, deutet dies darauf hin, dass die Tabelle gelöscht wurde. In diesem Fall wird auch der entsprechende Eintrag aus der Tabelle tblTabellenExportImport entfernt.

pic002.png

Abb. 2: Diese Tabelle speichert, welche Tabellen importiert und exportiert werden sollen.

Danach folgt der umgekehrte Weg: Die Prozedur durchläuft in einer For Each-Schleife alle TableDef-Objekte der aktuellen Datenbank und versucht, für jede Tabelle einen Eintrag in der Tabelle tblTabellenExportImport anzulegen.

Da die Tabelle einen eindeutigen Index für das Feld Tabelle enthält, schlägt dies bei bereits vorhandenen Tabellennamen fehl. Dies ist jedoch kein Problem, da die Access-eigene Fehlerbehandlung zuvor ausgeschaltet wurde.

Schließlich speichert die Tabelle im Ja/Nein-Feld Export, ob eine Tabelle beim Exportieren oder Importieren berücksichtigt werden soll. Dies soll sich auch im Listenfeld lstTabellen widerspiegeln, das für die Mehrfachauswahl vorbereitet wurde.

Dazu werden erneut alle Datensätze der Tabelle tblTabellenExportImport durchlaufen. Dabei stellt die Routine für alle Datensätze, die im Feld Export den Wert True enthalten, den Wert Selected des jeweiligen Eintrags im Listenfeld auf den Wert True ein.

Zwar erlaubt das Listenfeld keinen direkten Zugriff auf die Einträge über den Primärschlüsselwert, aber das ist nicht schlimm: Da das Listenfeld alle Datensätze der Tabelle tblTabellenExportImport anzeigt, entspricht die absolute Position des Datensatzzeigers dem Index der Einträge im Listenfeld.

Tabellen aus- und abwählen

Wenn der Benutzer auf einen der Einträge des Listenfeldes lstTabellen klickt, soll der neue Zustand direkt in der Tabelle tblTabellenExportImport gespeichert werden. Dies erledigt eine Prozedur, die durch das Ereignis Nach Aktualisierung des Listenfeldes ausgelöst wird. Leider gibt es bei der Mehrfachauswahl im Listenfeld keine Möglichkeit, direkt den zuletzt angeklickten Wert zu ermitteln. Also machen wir aus der Not eine Tugend und schreiben gleich jeweils alle Zustände in die Tabelle tblTabellenExportImport. Dies erledigt die Prozedur aus Listing 2.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.