André Minhorst, Duisburg
Wer will denn schon mehrere Süppchen kochen, wenn er doch eines servieren kann, das allen Beteiligten schmeckt. Letzteres ist leider in den meisten Unternehmen nicht möglich, da es in vielen Bereichen keine konsistenten Datenbestände gibt. Das fängt damit an, dass jeder Mitarbeiter sein persönliches Adressbuch in Outlook pflegt, anstatt auf die Groupware-Funktionen dieser Software zuzugreifen, die allen Mitarbeitern einen einheitlichen, aktuellen Adressbestand zur Verfügung stellt. Da das nur der Anfang für eine effizientere Organisation ist und Sie es besser machen sollen, lernen Sie im vorliegenden Beitrag, wie Sie die Daten unterschiedlicher Datenbanken geschickt verknüpfen.
Die Hauptbeispieldatenbank des vorliegenden Beitrags ist die Mitarbeiterverwaltung, die bereits in zwei Teilen in den Ausgaben 7/2001 und 1/2002 vorgestellt wurde. In den beiden Beiträgen wurde anhand der Mitarbeiterverwaltung die Erstellung einer Datenbankanwendung auf Basis der MSDE, einer abgespeckten Microsoft SQL Server-Variante, erläutert. Für diesen Beitrag finden Sie auf der Heft-CD eine reine Access-Version dieser Datenbank, von der damit auch Access 97-Anwender und Anwender von Access 2000 und höher, die keine MSDE und keinen SQL Server verwenden wollen, profitieren können.
Es wird noch eine weitere Beispieldatenbank hinzugezogen: Die Besprechungsplanung aus der vorliegenden Ausgabe von Access im Unternehmen. Der vorliegende Beitrag beschreibt verschiedene Möglichkeiten, Daten und Objekte zweier Datenbanken in der jeweils anderen Datenbank zu verwenden.
Die einfachste Art der Zusammenarbeit zweier Datenbanken erfolgt durch die Bereitstellung der Daten der einen Datenbank in der anderen Datenbank. Die beiden Datenbankanwendungen Mitarbeiterverwaltung und Besprechungsplanung benötigen beide die Daten der Mitarbeiter. Während sich die Mitarbeiterverwaltung sogar hauptsächlich mit den Mitarbeitern beschäftigt, sind die Mitarbeiter in der Besprechungsplanung nur ein Teil der eigentlich behandelten Objekte, nämlich der Besprechungen.
Daher sollen die Mitarbeiter fortan in der Mitarbeiterverwaltung gepflegt werden. Die Besprechungsplanung soll auf die in der Mitarbeiterverwaltung enthaltenen Mitarbeiterdaten zugreifen.
Aktueller Zustand
Wenn Sie die beiden Datenbanken und speziell die dort enthaltenen Tabellen zur Speicherung der Mitarbeiterdaten betrachten, fällt auf, dass die Daten in der Mitarbeiterverwaltung erwartungsgemäß wesentlich umfangreicher sind.
Die Besprechungsplanung enthält in der Tabelle tblMitarbeiter lediglich ein Indexfeld sowie ein Feld, in dem Vor- und Nachname des Mitarbeiters gespeichert werden.
Im „wirklichen Leben“ werden Sie kaum ein Unternehmen finden, in dem von Anfang an alle Anwendungen auf konsistente und einfach gehaltene Daten zugreifen. Das ist auch nicht realistisch, denn entweder müsste es dazu eine Rundumsoftware für alle Belange des Unternehmens geben oder das Unternehmen müsste eine solche Software erstellen lassen, was zweifelsfrei sehr teuer würde.
Public Sub MitarbeiterKopieren() Dim db As DAO.Database Dim rstMitarbeiterAlt As DAO.Recordset Dim rstMitarbeiterNeu As DAO.Recordset Dim strName As String Dim strVorname As String Dim strNachname As String Dim posKomma As Integer Set db = CurrentDb Set rstMitarbeiterAlt = db.OpenRecordset("tblMitarbeiterAlt", dbOpenDynaset) Set rstMitarbeiterNeu = db.OpenRecordset("tblMitarbeiterVerknuepft", _ dbOpenDynaset) Do While Not rstMitarbeiterAlt.EOF strName = rstMitarbeiterAlt!Mitarbeitername posKomma = InStr(1, strName, ",") strVorname = Trim(Mid(strName, 1, posKomma - 1)) strNachname = Trim(Mid(strName, posKomma + 1)) rstMitarbeiterNeu.FindFirst "[Nachname] = ''" & strNachname _ & "'' AND [Vorname] = ''" & strVorname & "''" If rstMitarbeiterNeu.NoMatch Then rstMitarbeiterNeu.AddNew rstMitarbeiterNeu!Vorname = strVorname rstMitarbeiterNeu!Nachname = strNachname rstMitarbeiterNeu.Update End If rstMitarbeiterAlt.MoveNext Loop End Sub
Quellcode 1
Daher ist wie im vorliegenden Fall davon auszugehen, dass mehrere Anwendungen prinzipiell die gleichen Daten speichern und, wenn überhaupt möglich, einander angepasst werden müssen.
Im vorliegenden Fall ist die Besprechungsplanung so ausgelegt, dass die Daten zu den einzelnen Mitarbeitern aus einem einzigen Feld namens Mitarbeitername bestehen, während in der Tabelle tblMitarbeiter der Mitarbeiterverwaltung die beiden Felder Vorname und Nachname getrennt geführt werden. Immerhin heißen die Primärindexfelder der beiden Tabellen beide MitarbeiterID.
Gewünschter Zustand
Ziel der hier beschriebenen Vorgehensweise ist das Schaffen eines einzigen Datentopfes mit Mitarbeiterdaten, auf den beide Anwendungen zugreifen können.
Am leichtesten geht das, indem Sie einfach die eine Anwendung beibehalten und die andere Anwendung mit den entsprechenden Daten verknüpfen. Im vorliegenden Fall bedeutet das ein Belassen der Mitarbeitertabelle in der Mitarbeiterverwaltung und die Anpassung der Besprechungsplanung.
Synchronisation derMitarbeitertabellen
Bevor die Mitarbeiterdaten nur noch in einer Datenbank beziehungsweise einer Tabelle gehalten werden, müssen die Daten aus beiden Tabellen zusammengefasst werden.
Dabei wird davon ausgegangen, dass Mitarbeiter, die in der Besprechungsplanung, aber nicht in der Mitarbeiterverwaltung geführt werden, zur Tabelle tblMitarbeiter der Mitarbeiterverwaltung hinzugefügt werden.
Diese Aufgabe übernimmt im vorliegenden Fall die Prozedur MitarbeiterKopieren aus Quellcode 1.
Hinweis
Diese Prozedur ist ein Beispiel für die Zusammenfassung der Datensätze zweier Tabellen in eine der beiden Tabellen. Wann immer Sie einen ähnlichen Vorgang durchführen wollen, können Sie das mit einer Anfügeabfrage oder wie im vorliegenden Fall mit einer geeigneten Prozedur erledigen. Sie werden aber aufgrund der von Fall zu Fall unterschiedlichen Gegebenheiten jeweils eine neue Vorgehensweise dafür entwickeln müssen.
Die Tabelle durchläuft alle Datensätze der Mitarbeitertabelle der Besprechungsplanung und überprüft, ob in der entsprechenden Tabelle der Mitarbeiterverwaltung bereits ein Datensatz für den aktuellen Mitarbeiter vorhanden ist. Dabei wird der aus den Bestandteilen Nachname, Komma und Vorname bestehende Inhalt des Feldes Mitarbeitername in Nachname und Vorname aufgeteilt und als Vergleichskriterium verwendet. Wenn noch kein Mitarbeiter gleichen Namens vorhanden ist, wird dieser neu angelegt.
Anpassen einer Anwendung an Fremdtabellen
Abfragen, Formulare, Berichte und vor allem VBA-Code nehmen in den meisten Fällen Bezug auf Tabellen und deren Felder. Naiverweise könnte man nun einen Riesenberg Arbeit vermuten, um all die Datenbankobjekte und Codezeilen nach Bezügen auf die Tabelle tblMitarbeiter und die darin enthaltenen Felder zu durchsuchen und diese anzupassen.
Es geht aber viel leichter, und zwar in wenigen Schritten. Dabei hilft die Tatsache, dass Abfragen in 98% aller Fälle genau wie Tabellen angesprochen werden können. Nachfolgend werden folgende Schritte im Detail erläutert:
Löschen der Mitarbeitertabelle aus der Besprechungsverwaltung
Bevor Sie die Mitarbeitertabelle der Besprechungsverwaltung löschen können, müssen Sie natürlich überprüfen, ob die Mitarbeiterverwaltung den gleichen Stand hat oder ob die Besprechungsplanung gegebenenfalls schon Mitarbeiter enthält, die noch nicht in der Mitarbeiterverwaltung gespeichert sind. Das sollte zwar nicht sein, aber es wäre einer der Gründe, um Daten nur an einem Ort zu pflegen.
Nachdem Sie die Daten verglichen haben, können Sie die Tabelle tblMitarbeiter aus der Besprechungsplanung löschen. Wenn Sie nicht sicher sind, ob Sie die Tabelle nicht doch noch einmal benötigen, ändern Sie einfach den Namen in tblMitarbeiterAlt um.
Verknüpfen der neuenMitarbeitertabelle
Nun können Sie die Besprechungsplanung mit der Tabelle tblMitarbeiter der Mitarbeiterverwaltung verknüpfen. Gehen Sie dabei folgendermaßen vor:
Bild 1: Auswahl von zu verknüpfenden Tabellen
Bild 2: Verknüpfte und umbenannte Tabelle
Bild 3: Die Abfrage zur Simulation der Tabelle tblMitarbeiter
Sie können nun bereits auf die Mitarbeiterdaten der Mitarbeiterverwaltung zugreifen. Leider befindet sich in der Tabelle tblMitarbeiterVerknuepft kein Feld namens Mitarbeitername, auf das Formulare und Berichte der Besprechungsplanung zugreifen können, aber Sie haben ja ohnehin bereits den Tabellennamen umgeändert.
Mappen der Tabellenfelder in einer Abfrage
Nun folgt der Schritt, in dem Sie sich die Tatsache zu Nutze machen, dass fast alle Zugriffe auf Abfragen wie Zugriffe auf Tabellen funktionieren.
Dabei verwenden Sie eine Abfrage, die den gleichen Namen wie die zu ersetzende Tabelle tblMitarbeiter und auch die gleichen Felder enthält. Wenn eine andere Abfrage, ein Formular, ein Bericht oder VBA-Code auf das Datenbankobjekt mit dem Namen tblMitarbeiter zugreift, macht es keinen Unterschied, ob es sich dabei um eine Tabelle oder um eine Abfrage handelt.
Der Ausdruck Mitarbeitername: [Nachname] & „, “ & [Vorname] dient dazu, die beiden Felder Nachname und Vorname der Tabelle tblMitarbeiter der Mitarbeiterverwaltung in ein Feld namens Mitarbeitername zu mappen.
Damit haben Sie nun ein Datenbankobjekt, das genau den gleichen Namen und genau die gleichen Felder wie die ursprünglich in der Besprechungsplanung verwendete Tabelle tblMitarbeiter hat, aber tatsächlich die Daten der Tabelle tblMitarbeiter der Mitarbeiterverwaltung enthält.
Bild 4: Falsche oder fehlende Besprechungsteilnehmer durch unterschiedliche Schlüsselfelder
Probleme
Die Vorgehensweise wäre zu leicht, wenn nicht noch einige Probleme auftauchen würden – zumindest, wenn in beiden Datenbanken bereits Mitarbeiterdaten vorhanden sind.
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