Kooperation von Datenbanken

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 Tabelle tblMitarbeiter aus der Besprechungsplanung
  • Erstellen einer Verknüpfung zur Tabelle tblMitarbeiter der Mitarbeiterverwaltung und ändern des Namens dieser Tabelle, beispielsweise in tblMitarbeiterVerknuepft
  • Erstellen einer Abfrage namens tblMitarbeiter, die den Inhalt der verknüpften Tabelle so mappt, dass der Aufbau der Abfrage dem Aufbau der gelöschten Tabelle entspricht
  • 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:

  • Führen Sie den Eintrag Datei/Externe Daten/Tabellen verknüpfen… aus der Menüleiste aus.
  • Wählen Sie im Dialog Verknüpfen die Mitarbeiterverwaltung aus.
  • Wählen Sie im Dialog Tabellen verknüpfen die Tabelle tblMitarbeiter aus (siehe Bild 1).
  • Die Tabelle erscheint nun mit einem entsprechenden Symbol im Datenbankfenster. ändern Sie den Tabellennamen dort in tblMitarbeiterVerknuepft um (siehe Bild 2). (
  • 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.

  • Erstellen Sie eine neue Abfrage.
  • Fügen Sie der Abfrage die Tabelle tblMitarbeiterVerknuepft hinzu.
  • Ziehen Sie das Feld MitarbeiterID in das Entwurfsraster.
  • Legen Sie ein weiteres Feld an, das den in Bild 3 gezeigten Inhalt hat.
  • Speichern Sie die Abfrage unter dem Namen tblMitarbeiter. (
  • 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

    Schreibe einen Kommentar