MDB-Comparer

Zusammenfassung

Bauen Sie sich ein Tool zum Vergleichen des Datenmodells verschiedener Versionen einer Datenbank.

Techniken

Tabellen, VBA

Voraussetzungen

Access 2000 und höher

Beispieldatenbank

MDBComparer.mdb

André Minhorst, Duisburg

“Mmmh… irgendwas stimmt nicht. Die Anwendung, die mir der Kunde gerade zurückgeschickt hat, lief doch eben noch Und jetzt – fehlende Parameter, nicht vorhandene Tabellen” – Nun, so oder ähnlich sieht das aus, wenn der Anwender im Datenmodell wirkt und dann der Code nicht mehr passt. “Nicht, dass das Debugging allein schon nervend wäre – dann muss ich auch noch die kompletten Tabellen nach änderungen durchsuchen!” Aber nicht mehr lange – ab jetzt vergleichen Sie die Tabellen und Felder zweier Datenbankversionen vollautomatisch!

Im vorliegenden Beitrag lernen Sie ein Tool kennen, mit dem Sie die Unterschiede der Tabellen und Felder zweier Versionen einer Datenbank ermitteln können.

Der MDB-Comparer soll helfen, die Datenstruktur zweier Access-Datenbanken zu vergleichen. Dazu gehören in dieser ersten Version die Tabellen und die enthaltenen Felder samt wichtigen Eigenschaften wie Datentypen und Feldgrößen. Um weitere wichtige Informationen wie Verknüpfungen zwischen den einzelnen Tabellen oder Indizes soll sich eine erweiterte Fassung der hier vorgestellten Lösung in einer der folgenden Ausgaben von Access im Unternehmen kümmern.

Vergleich der Datenstruktur – wozu

Gerade noch liegt dem Autor eine Datenbank auf dem Tisch, deren Funktionen nicht mehr wie gewünscht arbeiten, weil der Besitzer die zugrunde liegenden Tabellen geändert hat. Was nun Am einfachsten wäre es wohl, einfach den durch die änderungen nicht mehr funktionierenden VBA-Code einfach einmal laufen zu lassen und diesen zu überarbeiten. Mit ein wenig Glück hängt es nur an einer Stelle; anderenfalls kann dies aber auch zu einem lang andauernden Hinterherfixen führen.

Die Analyse der änderungen am Datenmodell macht auf jeden Fall Sinn: Vielleicht muss man ja gar nicht an den VBA-Code heran, sondern kann das Problem auf andere Weise umgehen Wenn die Daten wie im vorliegenden Fall aus verknüpften Tabellen stammen, kann man das Problem viel eleganter lösen: Man benennt einfach die Verknüpfungen um – etwa durch Anhängen eines Zeichens wie dem Unterstrich (_) – und erstellt eine Abfrage, die auf der geänderten Tabelle beruht und genauso heißt. Formulare, Berichte und VBA-Code merken es in den meisten Fällen nicht, wenn man diesen statt einer Tabelle eine Abfrage mit dem Namen der eigentlich verwendeten Tabelle präsentiert. Man muss nur den Aufbau der verwendeten Abfragen auf das der ursprünglich verwendeten Tabelle anpassen – im einfachsten Fall durch das Umbenennen von Tabellen- und/oder Feldnamen.

Bild 1: Die komplette Benutzeroberfläche des MDB-Comparers

Und um zu erkennen, ob dies Sinn macht, muss man zuvor die änderungen an der Datenstruktur identifizieren.

Das Hauptformular der Anwendung

Die Benutzeroberfläche der Anwendung besteht aus einem einzigen Formular. Dort gibt der Benutzer die Namen der beiden zu untersuchenden Datenbanken ein und klickt auf die Schaltfläche Vergleichen – fertig! Das Tool schreibt nun eine Textdatei auf die Festplatte und öffnet diese direkt im Anschluss mit Notepad.

Die Optionen des Formulars sind schnell erklärt: Das Kontrollkästchen “gleiches Verzeichnis wie oben” sorgt dafür, dass beim öffnen des Datei öffnen-Dialogs direkt das Verzeichnis angezeigt wird, aus dem auch die erste Version der Datenbank stammt, und mit der Option Systemtabellen einbeziehen entscheidet man, ob man selbige ebenfalls vergleichen möchte.

Auch für den Bau einer scheinbar einfachen Anwendung wie dem MDB-Comparer sind einige sorgfältige Planungen notwendig. Sonst programmiert man einfach los und stellt irgendwann fest, dass man etwa eine Menge VBA-Code geschrieben hat, aber dieser so aussieht, dass man ihn nicht sinnvoll von einem Formular aus steuern und dessen Ergebnisse nicht in diesem darstellen kann.

Daher stellt man sich zunächst einen Plan zusammen, welche Aufgaben die Anwendung erledigen soll, welche Eingangswerte dafür erforderlich und welches Ergebnis die Anwendung liefern soll. Die Eingangswerte stehen schon fest: Dabei handelt es sich um die beiden zu vergleichenden Datenbanken. Zur Eingabe eigenen sich zwei Textfelder, gegebenenfalls um zwei Schaltflächen zum Aufrufen eines Datei öffnen-Dialogs ergänzt.

Bei den Ergebnissen sieht das schon anders aus: Wie sollen denn die Unterschiede in den Datenmodellen der beiden Datenbanken ausgegeben werden Sollen alle enthaltenen Informationen gegenübergestellt und die Unterschiede markiert werden, oder soll das Ergebnis nur die Unterschiede liefern Welche Unterschiede sind denn eigentlich zu erwarten Und wo soll das Ergebnis ausgegeben werden In einem Textfeld im gleichen Formular, das die Eingabe der zu vergleichenden Datenbanken ermöglicht Nun, wenn viele Unterschiede vorhanden sind, ist das in Abhängigkeit von der geplanten Größe des Formulars gegebenenfalls etwas unkomfortabel. Vielleicht kann man die Ergebnisse einfach in eine Textdatei schreiben, wie es auch Versionierungstools beim Vergleichen verschiedener Dateien tun Die Textdateien kann sich der Benutzer dann im Texteditor seiner Wahl ansehen und dessen Möglichkeiten wie etwa zum Durchsuchen der Datei voll ausschöpfen.

Ausgabe der Unterschiede

Wo Sie die Unterschiede ausgeben, spielt letzten Endes keine Rolle – die unterschiedlichen Techniken unterscheiden sich nur durch wenige Handgriffe voneinander.

Aber welche Unterschiede soll die Anwendung nun ausgeben und wie ermittelt man diese

Beginnen wir mit einer Liste der möglichen Unterschiede. Die Anwendung soll

  • hinzugefügte Tabellen und alle enthaltenen Felder und Eigenschaften mit dem Vermerk “Hinzugefügt:”,
  • gelöschte Tabellen und alle enthaltenen Felder und Eigenschaften mit dem Vermerk “Gelöscht:”,
  • hinzugefügte Felder inklusive Angabe der Tabellen und Eigenschaften mit dem Vermerk “Hinzugefügt:”,
  • gelöschte Felder inklusive Angabe der Tabellen und Eigenschaften mit dem Vermerk “Gelöscht:” und
  • geänderte Feldeigenschaften unter Angabe der Tabelle, des Feldes und der geänderten Eigenschaft in der alten und der neuen Version mit den Vermerken “Alt:” und “Neu:”
  • ausgeben.

    Dabei sollte man noch klären, inwieweit man versucht, Tabellen mit geänderten Tabellennamen oder Felder mit geänderten Feldnamen zu identifizieren oder ob man die jeweiligen Elemente als gelöscht und wieder hinzugefügt deklariert.

    Hier spielen dann auch die zur Verfügung stehenden Techniken eine Rolle: Sicher sollte man für ein Tool wie dieses darauf verzichten, einen Algorithmus zu entwickeln, der prüft, ob eine Tabelle mit geändertem Namen neu ist oder nur eine neue Fassung einer bestehenden Tabelle – wer viel Zeit hat, kann sich sicher einmal mit diesem Thema befassen, aber an dieser Stelle soll mit wenig Aufwand ein brauchbares Tool zum Erkennen der Unterschiede zweier Versionen einer Datenbank her.

    Unvermeidlich scheint, dass man zunächst die Elemente der einen Version der Datenbank durchläuft und schaut, ob die passenden Elemente in der zweiten Version der Datenbank ebenfalls enthalten sind und dies anschließend für die Elemente der zweiten Version wiederholt. Und wie das genau passiert, zeigt das folgende Kapitel.

    Als Beispiel kommt wieder mal die Nordwind-Datenbank zum Zuge – wenn auch diesmal in zweifacher und vor allem unterschiedlicher Ausführung.

    Die beiden Beispieldatenbanken heißen Nordwind_Alt.mdb und Nordwind_Neu.mdb, wobei die erstgenannte die Tabellen im Originalzustand enthält.

    Die neuere Version enthält folgende änderungen, die der MDB-Comparer erkennen soll:

  • eine neue Tabelle namens tblBeispiel mit zwei Feldern,
  • in der Tabelle Bestellungen fehlt das Feld Versandüber,
  • die Tabelle Versandfirmen fällt weg,
  • die Tabelle Personal wird in Mitarbeiter umbenannt,
  • das Feld Personal-Nr der neuen Tabelle Mitarbeiter wird in MitarbeiterID umbenannt, ebenso das gleichnamige Feld der Tabelle Bestellungen,
  • die Tabelle Artikel wird in Produkte umbenannt,
  • die Tabelle Bestellungen erhält ein neues Feld namens Rechnungsdatum,
  • und das Feld Beschreibung der Tabelle Kategorien erhält den Datentyp Text mit einer Feldgröße von 255 statt des Datentyps Memo.
  • Bild 2: Das Datenmodell der Beispieldatenbank

    Das Datenmodell besteht aus zwei Tabellen, die die einzelnen Tabellen sowie die Felder und deren Eigenschaften speichern (siehe Bild 2). Zusätzlich dazu bekommt jede Tabelle zwei Felder, die angeben, in welcher der beiden Datenbankversionen die Tabelle beziehungsweise das Feld enthalten ist.

    Die Tabellen speichern nicht das endgültige Ergebnis der Untersuchung, sondern lediglich die beim Untersuchen vorgefundenen Tabellen, Felder und deren Eigenschaften. Die Auswertung übernehmen die im nächsten Kapitel beschriebenen VBA-Prozeduren.

    Die beiden Tabellen sind über das Fremdschlüsselfeld TabelleID miteinander verknüpft; für die Verknüpfung ist referentielle Integrität festgelegt. Außerdem stellt die Aktivierung der Löschweitergabe sicher, dass beim Löschen der Einträge der Tabelle tblTabellen auch die passenden Einträge der Tabelle tblFelder gelöscht werden.

    Bild 3: Ein aus mehreren Feldern zusammengesetzter eindeutiger Schlüssel

    Damit die nachfolgend beschriebenen Routinen bereits vorhandene Elemente beim Einfügen identifizieren können, stellen Sie die Eigenschaft Indiziert des Feldes Tabellenname der Tabelle tblTabellen auf Ja (Ohne Duplikate) ein.

    Für die Tabelle tblFelder erzeugen Sie einen zusammengesetzten eindeutigen Schlüssel wie in Bild 3. Auf diese Weise markiert das Tool nur solche Felder als in beiden Versionen vorhanden, die wirklich exakt gleich sind. Wie dies genau ermittelt wird, erfahren Sie weiter unten.

    Das Formular frmVergleichen dient als Benutzerschnittstelle zu den im Modul mdlCompare enthaltenen Funktionen. Hier gibt man die zu vergleichenden Datenbanken sowie zwei weitere Optionen ein und startet den Vorgang mit der passenden Schaltfläche.

    Da der Schwerpunkt dieses Tools auf dem Vorgang zum Vergleichen der Tabellen und Felder zweier Datenbanken liegt, sollen die wenigen Funktionen des Formulars nicht in aller Länge beschrieben werden.

    Wichtig ist allein, dass die Prozedur, die durch einen Klick auf die Schaltfläche cmdVergleichen ausgelöst wird, erst die in den Tabellen des MDB-Comparers enthaltenen Daten löscht, diese dann über die Routine Einlesen mit den aus den angegebenen Datenbanken gewonnen Informationen füllt und den Inhalt der Tabellen dann mit der Prozedur Auswertung analysiert und die Ergebnis in einer Textdatei speichert.

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar