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.
Bild 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 (siehe Bild 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 Bild 2.
Bild 2: Die Erstellung eines Nachschlagefeldes ist nicht möglich.
Bild 3: Datensatzherkunft des Nachschlagefeldes
Bild 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:
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 (siehe Bild 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 Bild 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:
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.
Bild 5: Das Formular frmMitarbeiter in der Formularansicht
Bild 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 Bild 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: