Rekursive Beziehungen mit Access

Autor: André Minhorst, Duisburg

Neben den herkömmlichen 1:1-, 1:n- und m:n-Beziehungen gibt es noch eine weitere Beziehungsart, die von Access nicht unbedingt gefördert und daher größtenteils manuell nachzubilden ist: die rekursive Beziehung. Mit einer rekursiven Beziehung können Sie Verknüpfungen zwischen den Datensätzen einer einzigen Tabelle nachbilden. Dies ist z. B. gefragt, wenn Sie die Hierarchie der Mitarbeiter einer Firma nachbilden möchten. Im vorliegenden Beitrag erfahren Sie, wie eine rekursive Beziehung aufgebaut wird, was Sie bei der Datenpflege beachten müssen und wie Sie die gewünschten Daten anwendergerecht anzeigen können.

Es gibt eine Menge von Beispielen für rekursive Beziehungen – die bereits genannte Mitarbeiterhierarchie ist lediglich ein Paradebeispiel. Das Gleiche gilt für die Verwaltung von Stücklisten, für Familienstammbäume, Unternehmensstrukturen usw. Auch die Anzeige der Dateistruktur im Windows Explorer ist – im weitesten Sinne – ein Beispiel für eine rekursive Beziehung.

Als Beispiel soll die Beziehung zwischen Vorgesetzten und untergeordneten Mitarbeitern eines Unternehmens beschrieben werden. Dabei ist eigentlich nur eine kleine Regel zu beachten: Jeder Mitarbeiter darf nur einen Vorgesetzten haben. Dies ist schließlich auch leicht zu realisieren, indem dieser für jeden Datensatz per Nachschlagefeld ausgewählt wird.

Abb. 1: Entwurfsansicht der Tabelle tblMitarbeiter

Um den Aufbau einer rekursiven Beziehung anhand eines Beispiels zu erläutern, bedarf es lediglich einer einzigen Beispieltabelle. Die Tabelle beinhaltet nur vier Felder: ein Primärindexfeld namens MitarbeiterNr, zwei Felder zur Umschreibung des Namens sowie ein Verknüpfungsfeld zur Auswahl des Vorgesetzten des Mitarbeiters (s. Abb. 1).

Um einige Daten in die Tabelle einzugeben, müssen Sie lediglich noch das Verknüpfungsfeld Vorgesetzter anpassen. Es soll zu Beispielzwecken als Nachschlagefeld ausgeführt werden.

Keine Unterstützung durch den Assistenten

Wenn Sie nun den Assistenten für die Erstellung des Nachschlagefeldes verwenden möchten, stellt sich schnell Ernüchterung ein.

Im zweiten Schritt des Dialoges erscheint nämlich die Meldung aus Abb. 2.

Abb. 2: Die Erstellung eines Nachschlagefeldes ist nicht möglich.

Abb. 3: Datensatzherkunft des Nachschlagefeldes

Abb. 4: Auswahl eines Vorgesetzten

Nachdem Access auf diese Weise zu erkennen gegeben hat, dass es die Erstellung rekursiver Beziehungen nicht unterstützt, müssen Sie das Nachschlagefeld von Hand erstellen. Gehen Sie dazu folgendermaßen vor:

  • öffnen Sie die Tabelle in der Entwurfsansicht.
  • Wählen Sie für die Eigenschaft Felddatentyp des Feldes Vorgesetzter den Eintrag Zahl aus.
  • Wechseln Sie im Register zur Anzeige der Feldeigenschaften auf das Registerblatt Nachschlagen.
  • ändern Sie die Eigenschaft Steuerelement anzeigen auf den Wert Kombinationsfeld.
  • Klicken Sie in das leere Feld neben der Eigenschaft Datensatzherkunft und betätigen Sie die nun erscheinende Schaltfläche mit den drei Punkten (…).
  • Klicken Sie im Dialog doppelt auf den Eintrag Tabelle anzeigen, um die Tabelle in den Abfrageentwurf zu bringen.
  • Passen Sie den Abfrageentwurf entsprechend Abb. 3 an und schließen Sie ihn.
  • Setzen Sie noch die Eigenschaft Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreite auf den Wert 0cm.
  • Anschließend können Sie die Tabelle in der Datenblattansicht anzeigen. Während Sie einige Daten eingeben, werden Sie feststellen, dass für das Feld Vorgesetzter derzeit noch keine Daten ausgewählt werden können. Erst nachdem Sie die Tabelle geschlossen und wieder geöffnet haben, erscheinen die bisher eingegebenen Einträge zur Auswahl im Kombinationsfeld (s. Abb. 4).

    Es gibt natürlich auch noch einen komplizierten Weg, um eine Beziehung zwischen Vorgesetztem und unterstellten Mitarbeitern realisieren zu können. Dazu verwenden Sie eine m:n-Be-ziehung, mit der Sie zu jedem Vorgesetztem beliebig viele Unterstellte auswählen können. Dadurch können aber Inkonsistenzen auftreten, da Sie einen Mitarbeiter als Unterstellten mehrerer Vorgesetzter wählen können.

    Das soll nicht der Fall sein, denn jeder Mitarbeiter darf nur einem Vorgesetzten zugeordnet werden. Daher ist die rekursive Beziehung der konsequentere Ansatz.

    Aktuellen Mitarbeiter als Vorgesetztenausschließen

    In Abb. 4 findet sich nun ein kleiner Schönheitsfehler: Das Kombinationsfeld zur Auswahl des Vorgesetzten zeigt auch den Mitarbeiter an, für den der Vorgesetzte ausgewählt werden soll. Neben diesem Effekt soll außerdem verhindert werden, dass unterstellte Mitarbeiter als Vorgesetzte zur Auswahl stehen.

    Die Möglichkeiten, dies im Nachschlagefeld einer Tabelle zu realisieren, sind aber begrenzt. Statt-dessen werden Sie die anzuzeigenden Mitarbeiter in den entsprechenden Formularen einschränken.

    Auswahl keines Vorgesetzten

    In der Hierarchie von Unternehmen gibt es immer eine höchste Ebene, deren Mitarbeiter keinen Vorgesetzten haben. Man kann auf unterschiedliche Weise keinen Vorgesetzten auswählen. In der Datenblattansicht der Tabelle können Sie beispielsweise einfach keinen Wert auswählen. Anwenderfreundlicher wäre allerdings, wenn Sie direkt einen Eintrag mit dem Text <Kein Vorgesetzter> o. ä. bereithielten.

    Dazu gibt es prinzipiell zwei Möglichkeiten:

    Entweder Sie fügen der Mitarbeitertabelle selbst einen solchen Eintrag hinzu. Dies würde allerdings nicht besonders sinnvoll sein, da die Tabelle ja lediglich Mitarbeiter enthalten soll.

    Daher erweitern Sie einfach die Datensatzherkunft des Nachschlagefeldes bzw. später im Formular die Datensatzherkunft des Kombinationsfeldes zur Auswahl des Vorgesetzten per Union-Abfrage um einen entsprechenden Eintrag.

    Zur komfortablen Verwaltung der Vorgesetzten und Mitarbeiter benötigen Sie ein entsprechendes Formular.

    Anlegen des Formulars

    Legen Sie also ein neues Formular namens frmMitarbeiter an und öffnen Sie es zunächst in der Entwurfsansicht. Gehen Sie dann folgendermaßen vor:

  • ändern Sie die Eigenschaften Bildlaufleisten, Datensatzmarkierer und Trennlinien auf den Wert Nein.
  • Stellen Sie die Eigenschaft Beschriftung des Formulars auf den Wert Vorgesetzte und Mitarbeiter ein.
  • Wählen Sie anschließend als Datenherkunft des Formulars die Tabelle tblMitarbeiter aus.
  • Aktivieren Sie die Feldliste und ziehen Sie die Felder MitarbeiterID, Nachname, Vorname und Vorgesetzter in den Detailbereich.
  • Stellen Sie für das Feld MitarbeiterID die Eigenschaft Aktiviert auf den Wert Nein und die Eigenschaft Gesperrt auf den Wert Ja ein.
  • Der Wert des Feldes MitarbeiterID ist ein Autowert und kann ohnehin nicht verändert werden. Daher sperren Sie das Feld direkt.

    Außerdem sollten Sie – aus rein optischen Gründen – das Feld den Bezeichnungsfeldern anpassen, damit der Anwender gar nicht auf die Idee kommt, den Wert des Feldes MitarbeiterID manuell zu verändern.

    Abb. 5: Das Formular frmMitarbeiter in der Formularansicht

    Abb. 6: Datensatzherkunft des Kombinationsfeldes cboVorgesetzte

    Dies geht am schnellsten, indem Sie eines der Bezeichnungsfelder markieren, die Schaltfläche Format übertragen in der Symbolleiste anklicken und anschließend auf das Feld MitarbeiterID klicken.

    Wenn Sie die genannten Schritte durchgeführt haben, sollte das Ergebnis wie in Abb. 5 aussehen.

    Anpassen des Kombinationsfeldes zur Eingabe von Vorgesetzten

    Der nächste Schritt ist die Anpassung des Kombinationsfeldes zur Anzeige der möglichen Vorgesetzten. Dabei sollen drei Ziele erreicht werden:

  • Unterbinden der Anzeige des gleichen Mitarbeiters
  • Unterbinden der Anzeige unterstellter Mitarbeiter
  • Anzeige des Eintrags <Kein Vorgesetzter>
  • Anzeige des aktuellen Mitarbeiters verhindern

    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