{"id":55000062,"date":"2002-06-01T00:00:00","date_gmt":"2021-02-10T20:08:24","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=62"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Rekursive_Beziehungen_mit_Access","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/","title":{"rendered":"Rekursive Beziehungen mit Access"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Autor: Andr&eacute; Minhorst, Duisburg<\/p>\n<p><\/b><\/p>\n<p><b>Neben den herk&ouml;mmlichen 1:1-, 1:n- und m:n-Beziehungen gibt es noch eine weitere Beziehungsart, die von Access nicht unbedingt gef&ouml;rdert und daher gr&ouml;&szlig;tenteils manuell nachzubilden ist: die rekursive Beziehung. Mit einer rekursiven Beziehung k&ouml;nnen Sie Verkn&uuml;pfungen zwischen den Datens&auml;tzen einer einzigen Tabelle nachbilden. Dies ist z. B. gefragt, wenn Sie die Hierarchie der Mitarbeiter einer Firma nachbilden m&ouml;chten. Im vorliegenden Beitrag erfahren Sie, wie eine rekursive Beziehung aufgebaut wird, was Sie bei der Datenpflege beachten m&uuml;ssen und wie Sie die gew&uuml;nschten Daten anwendergerecht anzeigen k&ouml;nnen.<\/b><\/p>\n<p>Es gibt eine Menge von Beispielen f&uuml;r rekursive Beziehungen &#8211; die bereits genannte Mitarbeiterhierarchie ist lediglich ein Paradebeispiel. Das Gleiche gilt f&uuml;r die Verwaltung von St&uuml;cklisten, f&uuml;r Familienstammb&auml;ume, Unternehmensstrukturen usw. Auch die Anzeige der Dateistruktur im Windows Explorer ist &#8211; im weitesten Sinne &#8211; ein Beispiel f&uuml;r eine rekursive Beziehung.<\/p>\n<p>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&szlig;lich auch leicht zu realisieren, indem dieser f&uuml;r jeden Datensatz per Nachschlagefeld ausgew&auml;hlt wird.<\/p>\n<p><IMG height=\"266\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Entwurfsansicht der Tabelle tblMitarbeiter<\/span><\/b><\/p>\n<p>Um den Aufbau einer rekursiven Beziehung anhand eines Beispiels zu erl&auml;utern, bedarf es lediglich einer einzigen Beispieltabelle. Die Tabelle beinhaltet nur vier Felder: ein Prim&auml;rindexfeld namens MitarbeiterNr, zwei Felder zur Umschreibung des Namens sowie ein Verkn&uuml;pfungsfeld zur Auswahl des Vorgesetzten des Mitarbeiters (siehe Bild 1).<\/p>\n<p>Um einige Daten in die Tabelle einzugeben, m&uuml;ssen Sie lediglich noch das Verkn&uuml;pfungsfeld Vorgesetzter anpassen. Es soll zu Beispielzwecken als Nachschlagefeld ausgef&uuml;hrt werden.<\/p>\n<h3>Keine Unterst&uuml;tzung durch den Assistenten<\/h3>\n<p>Wenn Sie nun den Assistenten f&uuml;r die Erstellung des Nachschlagefeldes verwenden m&ouml;chten, stellt sich schnell Ern&uuml;chterung ein.<\/p>\n<p>Im zweiten Schritt des Dialoges erscheint n&auml;mlich die Meldung aus Bild 2.<\/p>\n<p><IMG height=\"307\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Die Erstellung eines Nachschlagefeldes ist nicht m&ouml;glich.<\/span><\/b><\/p>\n<p><IMG height=\"305\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic003.png\" width=\"450\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Datensatzherkunft des Nachschlagefeldes<\/span><\/b><\/p>\n<p><IMG height=\"167\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic004.png\" width=\"413\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Auswahl eines Vorgesetzten<\/span><\/b><\/p>\n<p>Nachdem Access auf diese Weise zu erkennen gegeben hat, dass es die Erstellung rekursiver Beziehungen nicht unterst&uuml;tzt, m&uuml;ssen Sie das Nachschlagefeld von Hand erstellen. Gehen Sie dazu folgenderma&szlig;en vor:<\/p>\n<li>&ouml;ffnen Sie die Tabelle in der Entwurfsansicht.<\/li>\n<li>W&auml;hlen Sie f&uuml;r die Eigenschaft Felddatentyp des Feldes Vorgesetzter den Eintrag Zahl aus.<\/li>\n<li>Wechseln Sie im Register zur Anzeige der Feldeigenschaften auf das Registerblatt Nachschlagen.<\/li>\n<li>&auml;ndern Sie die Eigenschaft Steuerelement anzeigen auf den Wert Kombinationsfeld.<\/li>\n<li>Klicken Sie in das leere Feld neben der Eigenschaft Datensatzherkunft und bet&auml;tigen Sie die nun erscheinende Schaltfl&auml;che mit den drei Punkten (&#8230;).<\/li>\n<li>Klicken Sie im Dialog doppelt auf den Eintrag Tabelle anzeigen, um die Tabelle in den Abfrageentwurf zu bringen.<\/li>\n<li>Passen Sie den Abfrageentwurf entsprechend Bild 3 an und schlie&szlig;en Sie ihn.<\/li>\n<li>Setzen Sie noch die Eigenschaft Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreite auf den Wert 0cm.<\/li>\n<p>Anschlie&szlig;end k&ouml;nnen Sie die Tabelle in der Datenblattansicht anzeigen. W&auml;hrend Sie einige Daten eingeben, werden Sie feststellen, dass f&uuml;r das Feld Vorgesetzter derzeit noch keine Daten ausgew&auml;hlt werden k&ouml;nnen. Erst nachdem Sie die Tabelle geschlossen und wieder ge&ouml;ffnet haben, erscheinen die bisher eingegebenen Eintr&auml;ge zur Auswahl im Kombinationsfeld (siehe Bild 4).<\/p>\n<p>Es gibt nat&uuml;rlich auch noch einen komplizierten Weg, um eine Beziehung zwischen Vorgesetztem und unterstellten Mitarbeitern realisieren zu k&ouml;nnen. Dazu verwenden Sie eine m:n-Be-ziehung, mit der Sie zu jedem Vorgesetztem beliebig viele Unterstellte ausw&auml;hlen k&ouml;nnen. Dadurch k&ouml;nnen aber Inkonsistenzen auftreten, da Sie einen Mitarbeiter als Unterstellten mehrerer Vorgesetzter w&auml;hlen k&ouml;nnen.<\/p>\n<p>Das soll nicht der Fall sein, denn jeder Mitarbeiter darf nur einem Vorgesetzten zugeordnet werden. Daher ist die rekursive Beziehung der konsequentere Ansatz.<\/p>\n<h3>Aktuellen Mitarbeiter als Vorgesetztenausschlie&szlig;en<\/h3>\n<p>In Bild 4 findet sich nun ein kleiner Sch&ouml;nheitsfehler: Das Kombinationsfeld zur Auswahl des Vorgesetzten zeigt auch den Mitarbeiter an, f&uuml;r den der Vorgesetzte ausgew&auml;hlt werden soll. Neben diesem Effekt soll au&szlig;erdem verhindert werden, dass unterstellte Mitarbeiter als Vorgesetzte zur Auswahl stehen.<\/p>\n<p>Die M&ouml;glichkeiten, dies im Nachschlagefeld einer Tabelle zu realisieren, sind aber begrenzt. Statt-dessen werden Sie die anzuzeigenden Mitarbeiter in den entsprechenden Formularen einschr&auml;nken.<\/p>\n<h3>Auswahl keines Vorgesetzten<\/h3>\n<p>In der Hierarchie von Unternehmen gibt es immer eine h&ouml;chste Ebene, deren Mitarbeiter keinen Vorgesetzten haben. Man kann auf unterschiedliche Weise keinen Vorgesetzten ausw&auml;hlen. In der Datenblattansicht der Tabelle k&ouml;nnen Sie beispielsweise einfach keinen Wert ausw&auml;hlen. Anwenderfreundlicher w&auml;re allerdings, wenn Sie direkt einen Eintrag mit dem Text &lt;Kein Vorgesetzter&gt; o. &auml;. bereithielten.<\/p>\n<p>Dazu gibt es prinzipiell zwei M&ouml;glichkeiten:<\/p>\n<p>Entweder Sie f&uuml;gen der Mitarbeitertabelle selbst einen solchen Eintrag hinzu. Dies w&uuml;rde allerdings nicht besonders sinnvoll sein, da die Tabelle ja lediglich Mitarbeiter enthalten soll.<\/p>\n<p>Daher erweitern Sie einfach die Datensatzherkunft des Nachschlagefeldes bzw. sp&auml;ter im Formular die Datensatzherkunft des Kombinationsfeldes zur Auswahl des Vorgesetzten per Union-Abfrage um einen entsprechenden Eintrag.<\/p>\n<p>Zur komfortablen Verwaltung der Vorgesetzten und Mitarbeiter ben&ouml;tigen Sie ein entsprechendes Formular.<\/p>\n<p><b>Anlegen des Formulars<\/b><\/p>\n<p>Legen Sie also ein neues Formular namens frmMitarbeiter an und &ouml;ffnen Sie es zun&auml;chst in der Entwurfsansicht. Gehen Sie dann folgenderma&szlig;en vor:<\/p>\n<li>&auml;ndern Sie die Eigenschaften Bildlaufleisten, Datensatzmarkierer und Trennlinien auf den Wert Nein.<\/li>\n<li>Stellen Sie die Eigenschaft Beschriftung des Formulars auf den Wert Vorgesetzte und Mitarbeiter ein.<\/li>\n<li>W&auml;hlen Sie anschlie&szlig;end als Datenherkunft des Formulars die Tabelle tblMitarbeiter aus.<\/li>\n<li>Aktivieren Sie die Feldliste und ziehen Sie die Felder MitarbeiterID, Nachname, Vorname und Vorgesetzter in den Detailbereich.<\/li>\n<li>Stellen Sie f&uuml;r das Feld MitarbeiterID die Eigenschaft Aktiviert auf den Wert Nein und die Eigenschaft Gesperrt auf den Wert Ja ein.<\/li>\n<p>Der Wert des Feldes MitarbeiterID ist ein Autowert und kann ohnehin nicht ver&auml;ndert werden. Daher sperren Sie das Feld direkt.<\/p>\n<p>Au&szlig;erdem sollten Sie &#8211; aus rein optischen Gr&uuml;nden &#8211; das Feld den Bezeichnungsfeldern anpassen, damit der Anwender gar nicht auf die Idee kommt, den Wert des Feldes MitarbeiterID manuell zu ver&auml;ndern.<\/p>\n<p><IMG height=\"219\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic005.png\" width=\"481\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Das Formular frmMitarbeiter in der Formularansicht<\/span><\/b><\/p>\n<p><IMG height=\"281\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic006.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Datensatzherkunft des Kombinationsfeldes cboVorgesetzte<\/span><\/b><\/p>\n<p>Dies geht am schnellsten, indem Sie eines der Bezeichnungsfelder markieren, die Schaltfl&auml;che Format &uuml;bertragen in der Symbolleiste anklicken und anschlie&szlig;end auf das Feld MitarbeiterID klicken.<\/p>\n<p>Wenn Sie die genannten Schritte durchgef&uuml;hrt haben, sollte das Ergebnis wie in Bild 5 aussehen.<\/p>\n<p><b>Anpassen des Kombinationsfeldes zur Eingabe von Vorgesetzten<\/b><\/p>\n<p>Der n&auml;chste Schritt ist die Anpassung des Kombinationsfeldes zur Anzeige der m&ouml;glichen Vorgesetzten. Dabei sollen drei Ziele erreicht werden:<\/p>\n<li>Unterbinden der Anzeige des gleichen Mitarbeiters<\/li>\n<li>Unterbinden der Anzeige unterstellter Mitarbeiter<\/li>\n<li>Anzeige des Eintrags &lt;Kein Vorgesetzter&gt;<\/li>\n<h3>Anzeige des aktuellen Mitarbeiters verhindern<\/h3>\n<p><!--30percent--><\/p>\n<p>Das Kombinationsfeld zeigt ausnahmslos alle Mitarbeiter an, die in der Tabelle tblMitarbeiter enthalten sind.<\/p>\n<p>Zumindest der Mitarbeiter, f&uuml;r den ein Vorgesetzter ausgew&auml;hlt werden soll, ist aus dem Kombinationsfeld zu entfernen. Gehen Sie dazu folgenderma&szlig;en vor:<\/p>\n<li>&ouml;ffnen Sie das Formular in der Entwurfsansicht und markieren Sie das Kombinationsfeld Vorgesetzter.<\/li>\n<li>Um Verwechslungen zwischen dem Steuerelement namens Vorgesetzter und dem gleichnamigen Feld der Datenherkunft des Formulars zu verhindern, &auml;ndern Sie den Namen des Kombinationsfeldes auf cboVorgesetzter ab.<\/li>\n<li>Klicken Sie im Register Daten des Eigenschaftsfensters in das Feld f&uuml;r die Eigenschaft Datensatzherkunft.<\/li>\n<li>&ouml;ffnen Sie die Entwurfsansicht der zugrunde liegenden Abfrage durch einen Mausklick auf die nun erscheinende Schaltfl&auml;che mit den drei Punkten (&#8230;).<\/li>\n<li>Es erscheint die Datensatzherkunft in der Entwurfsansicht. Passen Sie diese entsprechend Bild 6 an.<\/li>\n<p>Die neue Variante der Abfrage enth&auml;lt nun ein Kriterium, das nur noch diejenigen Datens&auml;tze anzeigt, deren MitarbeiterID nicht mit der MitarbeiterID des aktuell im Formular angezeigten Mitarbeiters &uuml;bereinstimmt.<\/p>\n<p>Wenn Sie den Abfrageentwurf geschlossen haben und in die Formularansicht des Formulars wechseln, k&ouml;nnen Sie bereits alle Mitarbeiter au&szlig;er dem aktuell angezeigten mit dem Kombinationsfeld ausw&auml;hlen.<\/p>\n<pre>SELECT MitarbeiterID, [Nachname] & \", \" & [Vorname] AS _     Mitarbeiter\r\nFROM tblMitarbeiter\r\nWHERE MitarbeiterID &lt;&gt;         [Forms]![frmMitarbeiter]![MitarbeiterID]\r\nUNION \r\nSELECT 0 AS MitarbeiterID, \"&lt;Kein Vorgesetzter&gt;\" \r\nAS Mitarbeiter \r\nFROM tblMitarbeiter;<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<p><IMG height=\"176\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic007.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Die Union-Abfrage im Datenbankfenster<\/span><\/b><\/p>\n<p><IMG height=\"228\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic008.png\" width=\"428\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Auswahl eines Mitarbeiters als Vorgesetzten<\/span><\/b><\/p>\n<h3>Wenn ein Mitarbeiter keinen Vorgesetztenhat &#8230;<\/h3>\n<p>Unter Umst&auml;nden soll f&uuml;r einen Mitarbeiter kein Vorgesetzter ausgew&auml;hlt werden &#8211; z. B. weil der Mitarbeiter aus der h&ouml;chsten Ebene der Unternehmenshierarchie stammt.<\/p>\n<p>F&uuml;r diesen Fall soll das Kombinationsfeld zum Anzeigen eines solchen Eintrags vorbereitet werden. Dazu m&uuml;ssen Sie lediglich die Datensatzherkunft des Kombinationsfeldes um einen Eintrag erweitern. Da dieser &#8211; wie bereits erw&auml;hnt &#8211; nicht in der Tabelle tblMitarbeiter enthalten ist, m&uuml;ssen Sie ihn der Datensatzherkunft per Union-Abfrage hinzuf&uuml;gen.<\/p>\n<p>Union-Abfragen werden in der Abfrage-Entwurfsansicht leider nicht unterst&uuml;tzt, sodass Sie die Erweiterung in der SQL-Ansicht vornehmen m&uuml;ssen.<\/p>\n<p>&ouml;ffnen Sie die Abfrage dazu erneut in der Entwurfsansicht und wechseln Sie dann in die SQL-Ansicht. Geben Sie dort den Ausdruck aus Quellcode 1 ein bzw. erg&auml;nzen Sie den bestehenden Teil um den Abschnitt, der mit dem SQL-Schl&uuml;sselwort Union beginnt.<\/p>\n<p>Wenn Sie die Abfrage nun unter dem Namen qryMitarbeiter speichern, erscheint im Register Abfragen des Datenbankfensters eine Abfrage mit dem Symbol f&uuml;r eine Union-Abfrage (siehe Bild 7).<\/p>\n<p>Zus&auml;tzlich zu den vorhandenen Eintr&auml;gen wird nun noch ein Eintrag mit dem Text &lt;Kein Vorgesetzter&gt; zur Auswahl angeboten. Falls der Anwender diesen Eintrag ausw&auml;hlt, wird f&uuml;r das Feld Vorgesetzter des aktuellen Datensatzes des Formulars der Wert 0 gespeichert. Das Kombinationsfeld sieht in der Formularansicht nun aus wie in Bild 8.<\/p>\n<h3>Anzeige unterstellter Mitarbeiter verhindern<\/h3>\n<p>Etwas komplizierter ist es, die Anzeige von Mitarbeitern zu unterbinden, die sich in der Hierarchie unterhalb des aktuell angezeigten Mitarbeiters befinden. Das Problem besteht darin, dass ja nicht nur Mitarbeiter der ersten Ebene unterhalb eines Vorgesetzten von der Anzeige im Kombinationsfeld ausgeschlossen werden sollen, sondern auch die Mitarbeiter in den Ebenen darunter. Dies l&auml;sst sich mit einer herk&ouml;mmlichen Abfrage als Datenherkunft nicht mehr realisieren.<\/p>\n<p><IMG height=\"248\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic009.png\" width=\"463\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9:  Hierarchische Darstellung von Daten im Listenfeld<\/span><\/b><\/p>\n<p>Andere Methoden, wie z. B. die Ermittlung der untergeordneten Mitarbeiter per VBA-Funktion, sind zwar m&ouml;glich, aber nicht praktikabel. Die f&uuml;r die Ermittlung der entsprechenden Mitarbeiter ben&ouml;tigte Zeit w&uuml;rde mit steigender Mitarbeiterzahl erheblich anwachsen.<\/p>\n<p>Prinzipiell haben Sie nun alle Voraussetzungen geschaffen, um die Hierarchie von Mitarbeitern nachzubilden. Das Wichtigste fehlt allerdings noch: ein Instrument, um die Hierarchie &uuml;bersichtlich anzuzeigen.<\/p>\n<p><b>Hierarchie per Einzug realisieren<\/b><\/p>\n<p>In den folgenden Abschnitten lernen Sie eine M&ouml;glichkeit kennen, um die hierarchischen Daten mithilfe eines Listenfeldes &uuml;bersichtlich anzuzeigen.<\/p>\n<p>Dabei erreichen Sie die hierarchische Ansicht durch das Einr&uuml;cken untergeordneter Eintr&auml;ge (siehe Bild 9).<\/p>\n<p>Da das Listenfeld-Steuerelement diese M&ouml;glichkeit standardm&auml;&szlig;ig nicht bietet, m&uuml;ssen Sie ein wenig improvisieren.<\/p>\n<h3>Hinweis<\/h3>\n<p>Zur komfortableren Anzeige von hierarchischen Daten verwenden Sie am besten das Treeview-Steuerelement. Es wird im Beitrag &#8222;Das Treeview-Steuerelement&#8220; der vorliegenden Ausgabe von &#8222;Access im Unternehmen&#8220; vorgestellt. <\/p>\n<h3>Anlegen des Listenfeldes<\/h3>\n<p>Legen Sie zun&auml;chst ein neues Listenfeld in der Entwurfsansicht des Formulars an und &auml;ndern Sie den Wert der Eigenschaft Name in lstHierarchie.<\/p>\n<p>Da die hierarchische Anzeige der Eintr&auml;ge durch das Einr&uuml;cken der Listenelemente erreicht werden soll, muss den jeweiligen Eintr&auml;gen jeweils ein entsprechend breiter Einzug hinzugef&uuml;gt werden.<\/p>\n<h3>Wertliste als Datensatzherkunft<\/h3>\n<p>Dies k&ouml;nnen Sie am besten erreichen, indem Sie statt einer herk&ouml;mmlichen Tabelle oder Abfrage eine Wertliste als Datensatzherkunft verwenden. Die Wertliste stellen Sie durch eine rekursive Funktion zusammen. In dieser Funktion weisen Sie auch den einzelnen Eintr&auml;gen den jeweilig ben&ouml;tigten Einzug hinzu.<\/p>\n<p>Damit das Listenfeld-Steuerlement &uuml;berhaupt eine Feldliste als Datensatzherkunft akzeptiert, m&uuml;ssen Sie zun&auml;chst einmal die Eigenschaft Herkunftsart auf den Wert Wertliste einstellen.<\/p>\n<p>Anschlie&szlig;end erstellen Sie eine Funktion, die rekursiv eine entsprechende Wertliste zusammenstellt. Legen Sie die Funktion in dem Klassenformular des Listenfeld-Steuerelements lstHierarchie an.<\/p>\n<p><b>Rekursive Funktion<\/b><\/p>\n<p>Sie finden die komplette Funktion in Quellcode 2. Die Funktion hat drei Parameter: Ebene, strHierarchie sowie intMitarbeiter. Zun&auml;chst ist nur der erste Parameter wichtig. F&uuml;r ihn &uuml;bergeben Sie beim ersten Funktionsaufruf den Wert 0 f&uuml;r die Hauptebene, die der obersten Hierarchieebene entspricht.<\/p>\n<pre>Private Function lstHierarchieFuellen(Ebene As Integer, Optional strHierarchie As _    String, Optional intMitarbeiter As Integer)\r\n    Dim db As Database\r\n    Dim rst As Recordset\r\n    Dim i As Integer\r\n    Dim Einzug As String\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(\"SELECT * FROM tblMitarbeiter WHERE Vorgesetzter = \" _        & intMitarbeiter, dbOpenDynaset)\r\n    For i = 1 To Ebene\r\n        Einzug = Einzug & \"  \"\r\n    Next i\r\n    Do While Not rst.EOF\r\n        strHierarchie = strHierarchie & Chr(34) & rst!MitarbeiterID & Chr(34) & \";\" _            & Chr(34) & Einzug & rst!Nachname & \", \" & rst!Vorname & Chr(34) & \";\"\r\n        lstHierarchieFuellen Ebene + 1, strHierarchie, rst!MitarbeiterID        rst.MoveNext\r\n    Loop\r\n    lstHierarchieFuellen = strHierarchie\r\nEnd Function<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Die Funktion deklariert zun&auml;chst die ben&ouml;tigten Variablen. Anschlie&szlig;end weist sie der Variablen db die aktuelle Datenbank und der Variablen rst eine Datensatzgruppe.<\/p>\n<p>Diese Datensatzgruppe beinhaltet alle Datens&auml;tze der Tabelle tblMitarbeiter, deren Vorgesetzter den Wert des &uuml;bergabeparameters intMitarbeiter hat. Da dieser im ersten Aufruf noch keinen Wert hat, wird automatisch der Wert 0 angenommen. Dementsprechend enth&auml;lt die Datensatzgruppe alle Datens&auml;tze, f&uuml;r die kein Vorgesetzter angegeben ist.<\/p>\n<p>Hier finden Sie zun&auml;chst eine For&#8230;Next-Schleife, die in Abh&auml;ngigkeit von der Ebene eine entsprechende Anzahl von Leerzeichen zu einer Zeichenkette zusammensetzt. Diese Zeichenfolge wird anschlie&szlig;end dem anzuzeigenden Mitarbeiternamen vorangestellt, damit dieser entsprechend seiner Ebene einger&uuml;ckt wird.<\/p>\n<p>Anschlie&szlig;end durchl&auml;uft die Funktion alle Da-tens&auml;tze der Datensatzgruppe rst in einer Do&#8230;While&#8230;Loop-Schleife.<\/p>\n<p>In der Schleife finden Sie zun&auml;chst die folgende Anweisung:<\/p>\n<pre>strHierarchie = strHierarchie & Chr(34) _    & rst!MitarbeiterID & Chr(34) & \";\" _    & Chr(34) & Einzug & rst!Nachname _    & \", \" & rst!Vorname & Chr(34) & \";\"<\/pre>\n<p>Der im ersten Durchlauf noch leeren Zeichenfolge strHierarchie wird hier z. B. folgender Ausdruck angeh&auml;ngt:<\/p>\n<pre>\"1\";\"Minhorst, Andr&eacute;\";<\/pre>\n<p>Dabei entspricht die Zahl 1 dem Ausdruck rst!MitarbeiterID und der Name dem Ausdruck rst!Nachname &#038; &#8222;, &#8220; &#038; rst!Vorname. Die Anf&uuml;hrungszeichen werden durch den Ausdruck Chr(34) an die Zeichenkette angef&uuml;gt.<\/p>\n<p><IMG height=\"282\" src=\"..\/fileadmin\/_temp_\/{2CB8529C-53BE-4873-910C-9AC803F1D23A}\/pic010.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10:  Setzen eines Haltepunktes f&uuml;r eine Funktion<\/span><\/b><\/p>\n<p>Mit der n&auml;chsten Anweisung wird es dann rekursiv: Hier erfolgt der erste Selbstaufruf der Funktion lstHierarchieFuellen. Bei dem Aufruf werden diesmal auch alle Parameter verwendet: Der Parameter Ebene erh&auml;lt als Wert die Summe aus der aktuellen Ebene und 1, f&uuml;r den Parameter strHierarchie wird die aktuelle Zeichenfolge und f&uuml;r den Parameter intMitarbeiter die MitarbeiterID des aktuellen Mitarbeiters &uuml;bergeben.<\/p>\n<p>In diesem Selbstaufruf sieht dann auch die verwendete Datensatzgruppe ein wenig anders aus: Da diesmal ein Wert f&uuml;r den &uuml;bergabeparameter vorhanden ist &#8211; n&auml;mlich die MitarbeiterID des &uuml;bergeordneten Mitarbeiters &#8211; ,enth&auml;lt die Datensatzgruppe auch entsprechend nur Datens&auml;tze von Mitarbeitern, deren Vorgesetzter der Mitarbeiter mit der &uuml;bergebenen MitarbeiterID ist.<\/p>\n<p>Da der Wert f&uuml;r den &uuml;bergabeparameter entsprechend nicht mehr 0 ist, werden den hinzugef&uuml;gten Zeichenfolgen auch entsprechende Leerzeichen vorangestellt.<\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>Wenn Sie den Durchlauf einer solchen Funktion einmal nachvollziehen m&ouml;chten, verwenden Sie am besten die Debug-Funktion des VBA-Editors von Access. Sie k&ouml;nnen den Ablauf einer Funktion Schritt f&uuml;r Schritt nachvollziehen, wenn Sie dem Code einen so genannten Haltepunkt hinzuf&uuml;gen. Dies tun Sie, indem Sie in der gew&uuml;nschten Zeile, an der die Funktion anhalten soll, auf den linken Rand des Modulfensters klicken (siehe Bild 10). Wenn Sie nun die Funktion starten, h&auml;lt diese an der markierten Stelle an. Mit der Taste F8 k&ouml;nnen Sie zeilenweise vorw&auml;rts springen, mit der Taste F5 bis zum n&auml;chsten Vorkommen des Haltepunkt. <\/p>\n<p><b>F&uuml;llen des Listenfeldes<\/b><\/p>\n<p>Damit das Listenfeld auch mit den hierarchisch angeordneten Mitarbeitern gef&uuml;llt wird, ben&ouml;tigen Sie noch eine Prozedur, die beim Anzeigen des Formulars ausgel&ouml;st wird und die der Datensatzherkunft den R&uuml;ckgabewert der Funktion lstHierarchieFuellen zuweist.<\/p>\n<p>Dazu legen Sie f&uuml;r die Ereigniseigenschaft Beim Laden die folgende Prozedur an:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me.lstHierarchie.RowSource = _        lstHierarchieFuellen(0)\r\nEnd Sub<\/pre>\n<p>Diese Prozedur weist der Datensatzherkunft das Ergebnis der Funktion lstHierarchieFuellen zu und verwendet dabei den Wert 0 f&uuml;r den &uuml;bergabeparameter Ebene.<\/p>\n<p><b>Funktionalit&auml;t f&uuml;r das Listenfeld<\/b><\/p>\n<p>Das Listenfeld zur Anzeige der Hierarchie der Mitarbeiter zeigt die Hierarchie nun &uuml;bersichtlich an.<\/p>\n<p>Es bietet leider nicht die Funktionalit&auml;t wie beispielsweise das Treeview-Steuerelement. So lassen sich z. B. nicht einzelne Ebenen ein- oder ausblenden.<\/p>\n<p>Mit ein wenig Fantasie l&auml;sst sich jedoch ziemlich jede Funktion einigerma&szlig;en nachbilden.<\/p>\n<p>Eine m&ouml;glicherweise interessante Funktion ist beispielsweise die M&ouml;glichkeit, per Doppelklick auf einen Eintrag des Listenfeldes den gew&uuml;nschten Mitarbeiter im Formular anzuzeigen. <\/p>\n<pre>Private Sub lstHierarchie_DblClick(Cancel As Integer)\r\n    Me.RecordsetClone.FindFirst \"MitarbeiterID = \" _        & Me.lstHierarchie\r\n    Me.Bookmark = Me.RecordsetClone.Bookmark\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>Private Sub Form_Current()\r\n    Me.cboVorgesetzter.Requery\r\n    Me.lstHierarchie.Value = Me.MitarbeiterID\r\nEnd Sub <\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<pre>Private Sub cboVorgesetzter_AfterUpdate()\r\n    Me.lstHierarchie.Rowsource = lstHierarchieFuellen(0)\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<p>Dies geht sogar recht einfach. Legen Sie einfach f&uuml;r die Ereigniseigenschaft Beim Doppelklicken des Listenfeldes die Prozedur aus Quellcode 3 an. Wenn Sie nun doppelt auf einen der Eintr&auml;ge des Formulars klicken, wird im Formular automatisch der gew&uuml;nschte Mitarbeiter angezeigt.<\/p>\n<p>Dies funktioniert nat&uuml;rlich auch im Umkehrschluss: Wenn Sie m&ouml;chten, dass der aktuell im Formular angezeigte Mitarbeiter im Listenfeld direkt markiert ist, m&uuml;ssen Sie nur die Prozedur, die durch das Ereignis Beim Anzeigen ausgel&ouml;st wird, wie in Quellcode 4 erweitern.<\/p>\n<h3>&auml;nderung des Vorgesetzten &uuml;bernehmen<\/h3>\n<p>Es kann nat&uuml;rlich auch passieren, dass einmal nachtr&auml;glich ein anderer Vorgesetzter ausgew&auml;hlt wird. In dem Fall soll nat&uuml;rlich auch das Listenfeld direkt aktualisiert werden. Dies erreichen Sie, indem Sie f&uuml;r die Ereigniseigenschaft Nach Aktualisierung des Kombinationsfeldes cboVorgesetzter die Prozedur aus Quellcode 5 hinterlegen. In dieser Prozedur wird direkt die komplette Liste neu zusammengestellt. Es reicht nicht aus, die Datensatzherkunft des Listenfeldes mit der Methode Requery zu aktualisieren. <\/p>\n<p>Der vorliegende Beitrag bietet einige Ans&auml;tze zur Verwaltung von hierarchischen Daten in rekursiv definierten Tabellen. Es gibt noch weitere M&ouml;glichkeiten zur Darstellung solcher Daten. Eine M&ouml;glichkeit ist die Verwendung des Treeview-Steuerelements, das ebenfalls in der vorliegenden Ausgabe von Access im Unternehmen Seite 15 ff. vorgestellt wird.<\/p>\n<p>Sie k&ouml;nnen aber auch die Variante mit dem Listenfeld weiter ausbauen. Es ist z. B. auch hier gut m&ouml;glich, zu Beginn nur die Mitarbeiter der ersten Ebene anzuzeigen und erst durch einen Doppelklick auf die jeweiligen Eintr&auml;ge die untergeordneten Mitarbeiter.<\/p>\n<p>Dazu w&uuml;rde man zun&auml;chst die Eintr&auml;ge der Mitarbeiter mit den entsprechenden Einz&uuml;gen versehen und in einer tempor&auml;ren Tabelle speichern. Hier ist neben den &uuml;blichen Feldern ein weiteres Feld namens Anzeigen vorzusehen, mit dem Sie festlegen, ob der Eintrag direkt beim &ouml;ffnen des Formulars angezeigt wird.<\/p>\n<p>Sollen untergeordnete Eintr&auml;ge zu einem der angezeigten Mitarbeiter erscheinen, w&uuml;rde man doppelt auf den gew&uuml;nschten Eintrag klicken und damit eine Prozedur ausl&ouml;sen, die den Inhalt des Feldes Anzeigen aller untergeordneten Eintr&auml;ge auf den Wert Wahr setzt und anschlie&szlig;end die Datensatzherkunft des Listenfeldes aktualisiert. Das Listenfeld zeigt dann alle Eintr&auml;ge der tempor&auml;ren Tabelle an, deren Feld Anzeigen den Wert Wahr hat.<\/p>\n<h3>Hinweis<\/h3>\n<p>Im Formular frmMitarbeiterHierarchie der Beispieldatenbank finden Sie ein Beispiel f&uuml;r diese Vorgehensweise. <\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>RekursiveBeziehungen00.mdb<\/p>\n<p>RekursiveBeziehungen97.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/2A33F629-F60F-4CB7-AE36-7D384FDCE5C7\/aiu_62.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neben den herk&ouml;mmlichen 1:1-, 1:n- und m:n-Beziehungen gibt es noch eine weitere Beziehungsarg, die von Access nicht unbedingt gef&ouml;rdert und daher gr&ouml;&szlig;tenteils manuell nachzubilden ist: die rekursive Beziehung. Mit einer rekursiven Beziehung k&ouml;nnen Sie Verkn&uuml;pfungen zwischen den Datens&auml;tzen einer einzigen Tabelle nachbilden. Dies ist zum Beispiel gefragt, wenn Sie die Hierarchie der Mitarbeiter einer Firma nachbilden m&ouml;chten. Im vorliegenden Beitrag erfahren Sie, wie eine rekursive Beziehung aufgebaut wird, was Sie bei der Datenpflege beachten m&uuml;ssen und wie Sie die gew&uuml;nschten Daten anwendergerecht anzeigen k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662002,66032002,44000021],"tags":[],"class_list":["post-55000062","post","type-post","status-publish","format-standard","hentry","category-662002","category-66032002","category-Tabellen_und_Datenmodellierung"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Rekursive Beziehungen mit Access - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rekursive Beziehungen mit Access\" \/>\n<meta property=\"og:description\" content=\"Neben den herk&ouml;mmlichen 1:1-, 1:n- und m:n-Beziehungen gibt es noch eine weitere Beziehungsarg, die von Access nicht unbedingt gef&ouml;rdert und daher gr&ouml;&szlig;tenteils manuell nachzubilden ist: die rekursive Beziehung. Mit einer rekursiven Beziehung k&ouml;nnen Sie Verkn&uuml;pfungen zwischen den Datens&auml;tzen einer einzigen Tabelle nachbilden. Dies ist zum Beispiel gefragt, wenn Sie die Hierarchie der Mitarbeiter einer Firma nachbilden m&ouml;chten. Im vorliegenden Beitrag erfahren Sie, wie eine rekursive Beziehung aufgebaut wird, was Sie bei der Datenpflege beachten m&uuml;ssen und wie Sie die gew&uuml;nschten Daten anwendergerecht anzeigen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-10T20:08:24+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Rekursive Beziehungen mit Access\",\"datePublished\":\"2021-02-10T20:08:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/\"},\"wordCount\":3178,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/27f9b569dae14ebfb0f09b2df3c1bab9\",\"articleSection\":[\"2002\",\"3\\\/2002\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/\",\"name\":\"Rekursive Beziehungen mit Access - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/27f9b569dae14ebfb0f09b2df3c1bab9\",\"datePublished\":\"2021-02-10T20:08:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/27f9b569dae14ebfb0f09b2df3c1bab9\",\"contentUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/27f9b569dae14ebfb0f09b2df3c1bab9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Rekursive_Beziehungen_mit_Access\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rekursive Beziehungen mit Access\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rekursive Beziehungen mit Access - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/","og_locale":"de_DE","og_type":"article","og_title":"Rekursive Beziehungen mit Access","og_description":"Neben den herk&ouml;mmlichen 1:1-, 1:n- und m:n-Beziehungen gibt es noch eine weitere Beziehungsarg, die von Access nicht unbedingt gef&ouml;rdert und daher gr&ouml;&szlig;tenteils manuell nachzubilden ist: die rekursive Beziehung. Mit einer rekursiven Beziehung k&ouml;nnen Sie Verkn&uuml;pfungen zwischen den Datens&auml;tzen einer einzigen Tabelle nachbilden. Dies ist zum Beispiel gefragt, wenn Sie die Hierarchie der Mitarbeiter einer Firma nachbilden m&ouml;chten. Im vorliegenden Beitrag erfahren Sie, wie eine rekursive Beziehung aufgebaut wird, was Sie bei der Datenpflege beachten m&uuml;ssen und wie Sie die gew&uuml;nschten Daten anwendergerecht anzeigen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-10T20:08:24+00:00","og_image":[{"url":"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Rekursive Beziehungen mit Access","datePublished":"2021-02-10T20:08:24+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/"},"wordCount":3178,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9","articleSection":["2002","3\/2002","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/","url":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/","name":"Rekursive Beziehungen mit Access - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9","datePublished":"2021-02-10T20:08:24+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#primaryimage","url":"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9","contentUrl":"http:\/\/vg03.met.vgwort.de\/na\/27f9b569dae14ebfb0f09b2df3c1bab9"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Rekursive_Beziehungen_mit_Access\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Rekursive Beziehungen mit Access"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000062"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000062\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}