{"id":55000807,"date":"2011-12-01T00:00:00","date_gmt":"2020-05-22T21:59:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=807"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Beziehungen_per_DAO_verwalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/","title":{"rendered":"Beziehungen per DAO verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Beziehungen legt man normalerweise &uuml;ber das Beziehungsfenster an &#8211; oder man bem&uuml;ht den Nachschlage-Assistenten, der zus&auml;tzlich zum Nachschlagefeld auch noch die Beziehung erstellt. Manche Anforderungen verlangen jedoch, dass man Beziehungen per VBA erstellt oder diese ausliest. In diesem Beitrag finden Sie daher alles, was Sie zum Thema Beziehungen und DAO wissen m&uuml;ssen.<\/b><\/p>\n<p><b>Beziehungen<\/b><\/p>\n<p>Beziehungen dienen dazu, Datens&auml;tze verschiedener Tabellen zu verkn&uuml;pfen. Dabei besitzt die eine Tabelle einen eindeutigen Wert im Prim&auml;rschl&uuml;sselfeld. Die andere Tabelle besitzt ein Fremdschl&uuml;sselfeld, das im Normalfall nur Werte aufnehmen sollte, die im Prim&auml;rschl&uuml;sselfeld der ersten Tabelle vorkommen. Die beiden Tabellen hei&szlig;en Master- und Detailtabelle, wobei die Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld die Mastertabelle und die mit dem Fremdschl&uuml;sselfeld die Detailtabelle ist.<\/p>\n<p><b>Beziehungen auslesen<\/b><\/p>\n<p>Wenn Sie per Code die Beziehungen einer Datenbank auslesen m&ouml;chten, erledigen Sie dies beispielsweise mit dem <b>Relation<\/b>-Objekt der DAO-Bibliothek. Es gibt f&uuml;r jede Beziehung, also f&uuml;r jeden Beziehungspfeil im Beziehungsfenster, ein <b>Relation<\/b>-Objekt in der Datenbank. Die <b>Relation<\/b>-Objekte referenzieren Sie entweder &uuml;ber die <b>Relations<\/b>-Auflistung. Diese Auflistung ist wiederum ein Element des <b>Database<\/b>-Objekts. Dies f&uuml;hrt zu einer recht einfachen Prozedur, um die Anzahl der Beziehungen und deren Namen auszugeben &#8211; hier f&uuml;r die Beziehungen der S&uuml;dsturm-Datenbank aus Bild 1:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Beziehungen in der S&uuml;dsturm-Datenbank<\/span><\/b><\/p>\n<pre>Public Sub BeziehungenAuflisten()\r\n    Dim db As DAO.Database\r\n    Dim rel As DAO.Relation\r\n    Set db = CurrentDb\r\n    Debug.Print &quot;Anzahl Beziehungen: &quot; _\r\n&amp; db.Relations.Count\r\n    For Each rel In db.Relations\r\n        Debug.Print rel.Name\r\n    Next rel\r\nEnd Sub<\/pre>\n<p>Das Ergebnis sind die Anzahl und eine Liste der Namen der Beziehungen, die sich jeweils aus den in beiden Tabellen gespeicherten Elementen zusammensetzen:<\/p>\n<pre>Anzahl Beziehungen: 7\r\nArtikelBestelldetails\r\nBestellungenBestelldetails\r\nKategorienArtikel\r\nLieferantenArtikel\r\nPersonalBestellungen\r\ntblKundentblBestellungen\r\nVersandfirmenBestellungen<\/pre>\n<p>Welche Informationen liefert ein solches Relation-Objekt Nat&uuml;rlich finden Sie dort zumindest die f&uuml;r eine Beziehung notwendigen Informationen, also die Namen der beteiligten Felder und Tabellen: der Mastertabelle mit dem Prim&auml;rschl&uuml;sselfeld und der Detailtabelle mit dem Fremdschl&uuml;sselfeld.<\/p>\n<p>Diese Informationen liefert beispielsweise die folgende Prozedur:<\/p>\n<pre>Public Sub BeziehungsdatenAusgeben()\r\n    Dim db As DAO.Database\r\n    Dim rel As DAO.Relation\r\n    Set db = CurrentDb\r\n    For Each rel In db.Relations\r\n        Debug.Print rel.Name\r\n        Debug.Print &quot;==================&quot;\r\n        Debug.Print &quot;Mastertabelle:&quot;\r\n        Debug.Print &quot;  &quot; &amp; rel.Table\r\n        Debug.Print &quot;  &quot; &amp; rel.Fields(0).Name\r\n        Debug.Print &quot;Detailtabelle:&quot;\r\n        Debug.Print &quot;  &quot; &amp; rel.ForeignTable\r\n        Debug.Print &quot;  &quot; &amp; rel.Fields(0).ForeignName\r\n        Debug.Print &quot;&quot;\r\n    Next rel\r\nEnd Sub<\/pre>\n<p>F&uuml;r eine einzige Beziehung sieht das Ergebnis etwa wie folgt aus:<\/p>\n<pre>tblKundentblBestellungen\r\n==================\r\nMastertabelle:\r\n  tblKunden\r\n  KundeID\r\nDetailtabelle:\r\n  tblBestellungen\r\n  KundeID<\/pre>\n<p>Dabei legen Sie im Fremdschl&uuml;sselfeld <b>KundeID <\/b>der Detailtabelle <b>tblBestellungen <\/b>fest, zu welchem Kunden aus der Tabelle <b>tblKunden<\/b>, hier referenziert &uuml;ber einen der Werte des Prim&auml;rschl&uuml;sselfeldes <b>KundeID <\/b>der Mastertabelle, eine Bestellung geh&ouml;rt.<\/p>\n<p>Wichtig ist, dass <b>Table <\/b>und <b>Fields(0).Name <\/b>immer die Daten zur Mastertabelle und <b>ForeignTable <\/b>und <b>Fields(0).ForeignName <\/b>die Daten zur Detailtabelle liefern.<\/p>\n<p>Ach, und warum eigentlich der Bezug zum ersten Element der <b>Fields<\/b>-Auflistung Kann es denn Beziehungen geben, die mehr als ein Feld enthalten Ja, das funktioniert, und zwar wie in Bild 3.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Beziehung &uuml;ber zwei Felder<\/span><\/b><\/p>\n<p>Dies macht in der Praxis nur wenig Sinn, aber f&uuml;r genau eine solche Definition k&ouml;nnen Sie mehr als ein Feld aus der <b>Fields<\/b>-Auflistung des <b>Relation<\/b>-Objekts auslesen. Im Modul <b>mdlDAOBeziehungen <\/b>der Beispieldatenbank finden Sie unter <b>BeziehungsdatenAusgeben_MehrereFelder <\/b>ein Beispiel, wie Sie auch die Felder solcher Beziehungen auslesen k&ouml;nnen (wir werden Ihnen nicht zeigen, wie Sie solche Beziehungen per VBA anlegen &#8230;).<\/p>\n<p><b>Attribute der Beziehung<\/b><\/p>\n<p>Weitere Informationen liefert die Eigenschaft <b>Attributes<\/b>. Diese enth&auml;lt einen Zahlenwert, der verschiedene Eigenschaftswerte verkn&uuml;pft.<\/p>\n<p>Die m&ouml;glichen Werte lauten wie folgt und sind etwa im Objektkatalog zu finden (s. Bild 2):<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Attributes-Konstanten im Objektkatalog<\/span><\/b><\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>dbRelationUnique <\/b>(<b>1<\/b>): Kennzeichnet eine 1:1-Beziehung.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationDontEnforce <\/b>(<b>2<\/b>): Beziehung ohne referentielle Integrit&auml;t.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationInherited <\/b>(<b>4<\/b>): Beziehung besteht zwischen den Tabellen einer verkn&uuml;pften Datenbank.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationUpdateCascade <\/b>(<b>256<\/b>): Beziehung mit Aktualisierungsweitergabe.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationDeleteCascade <\/b>(<b>4096<\/b>): Beziehung mit L&ouml;schweitergabe.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationLeft <\/b>(<b>16777216<\/b>): Kennzeichnet ein <b>LEFT JOIN <\/b>zwischen den Tabellen.<\/li>\n<li class=\"aufz-hlung\"><b>dbRelationRight <\/b>(<b>33554432<\/b>): Kennzeichnet ein <b>RIGHT JOIN <\/b>zwischen den Tabellen.<\/li>\n<\/ul>\n<p>Alle Informationen &uuml;ber eine Beziehung liefert nun die Prozedur aus Bild 4):<\/p>\n<p class=\"listingueberschrift\">Listing 1: Ermitteln aller Eigenschaften einer Beziehung<\/p>\n<pre>Public Sub BeziehungsdatenAusgeben()\r\n    Dim db As DAO.Database\r\n    Dim rel As DAO.Relation\r\n    Set db = CurrentDb\r\n    For Each rel In db.Relations\r\n        Debug.Print rel.Name\r\n        Debug.Print &quot;==================&quot;\r\n        Debug.Print &quot;Mastertabelle: &quot; &amp; rel.Table &amp; &quot; (&quot; &amp; rel.Fields(0).Name &amp; &quot;)&quot;\r\n        Debug.Print &quot;Detailtabelle: &quot; &amp; rel.ForeignTable &amp; &quot; (&quot; &amp; rel.Fields(0).ForeignName &amp; &quot;)&quot;\r\n        Debug.Print &quot;Attribute: &quot;, rel.Attributes\r\n        If (rel.Attributes And dbRelationUnique) = dbRelationUnique Then\r\n            Debug.Print &quot; 1 - dbRelationUnique&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationDontEnforce) = dbRelationDontEnforce Then\r\n            Debug.Print &quot; 2 - dbRelationDontEnforce&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationInherited) = dbRelationInherited Then\r\n            Debug.Print &quot; 4 - dbRelationInherited&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationUpdateCascade) = dbRelationUpdateCascade Then\r\n            Debug.Print &quot; 256 - dbRelationUpdateCascade&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationDeleteCascade) = dbRelationDeleteCascade Then\r\n            Debug.Print &quot; 4096 - dbRelationDeleteCascade&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationLeft) = dbRelationLeft Then\r\n            Debug.Print &quot; 16777216 - dbRelationLeft&quot;\r\n        End If\r\n        If (rel.Attributes And dbRelationRight) = dbRelationRight Then\r\n            Debug.Print &quot; 33554432 - dbRelationRight&quot;\r\n        End If\r\n        Debug.Print &quot;&quot;\r\n    Next rel\r\nEnd Sub<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Einfache relationale Beziehung<\/span><\/b><\/p>\n<pre>KategorienArtikel\r\n==================\r\nMastertabelle: tblKategorien (KategorieID)\r\nDetailtabelle: tblArtikel (KategorieID)\r\nAttribute:     0 <\/pre>\n<p><!--30percent--><\/p>\n<p>Das bedeutet, dass die Beziehung keine L&ouml;schweitergabe und keine Aktualisierungsweitergabe enth&auml;lt, aber dass referentielle Integrit&auml;t definiert wurde. Dies ist der Standardfall: Besteht keine referentielle Integrit&auml;t, w&uuml;rde <b>Attributes <\/b>den Wert <b>2 (RelationDontEnforce) <\/b>enthalten. Eine 1:1-Beziehung mit L&ouml;sch- und Aktualisierungsweitergabe liefert hingegen diese Ausgabe &#8211; man achte auf den Wert <b>dbRelationUnique<\/b> (s. Bild 5):<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: 1:1-Beziehung mit L&ouml;sch- und Aktualisierungsweitergabe<\/span><\/b><\/p>\n<pre>tblVersandfirmentblVersandfirmenZusatzdaten\r\n==================\r\nMastertabelle: tblVersandfirmen (FirmaID)\r\nDetailtabelle: tblVersandfirmenZusatzdaten (VersandfirmaID)\r\nAttribute:     4353 \r\n 1 - dbRelationUnique\r\n 256 - dbRelationUpdateCascade\r\n 4096 - dbRelationDeleteCascade<\/pre>\n<p><b>Beziehungen externer Datenbanken<\/b><\/p>\n<p>Wenn Sie in einer Datenbank mit verkn&uuml;pften Tabellen arbeiten, k&ouml;nnen Sie die Verkn&uuml;pfungen nicht im Beziehungsfenster bearbeiten. Dies erkennen Sie leicht an den deaktivierten Steuerelementen (s. Bild 6). Au&szlig;erdem erkennen Sie als zus&auml;tzlichen Hinweis zum Beziehungstyp den Eintrag <b>1:n (extern)<\/b>. Wenn Sie eine solche Beziehung mit der obigen Prozedur untersuchen, erhalten Sie etwa folgende Ausgabe (beachten Sie auch die Angabe des Dateipfads):<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Beziehung aus einer fremden Datenbank<\/span><\/b><\/p>\n<pre>[C:\\Daten\\Fachartikel\\AccessImUnternehmen\\2011\\06\\BeziehungenPerDAO\\BeziehungenPerDAO.mdb].PersonalBestellungen\r\n==================\r\nMastertabelle: tblPersonal (PersonalID)\r\nDetailtabelle: tblBestellungen (PersonalID)\r\nAttribute:     4 \r\n 4 - dbRelationInherited<\/pre>\n<p><b>Verkn&uuml;pfungstyp<\/b><\/p>\n<p>Die beiden Konstanten <b>dbRelationLeft <\/b>und <b>dbRelationRight <\/b>&auml;ndern nichts am Verhalten der Beziehung zwischen den Tabellen. Sie k&ouml;nnen diese dennoch festlegen, um den Standard f&uuml;r das Anlegen von Abfragen auf Basis der beteiligten Tabellen zu definieren. &Uuml;ber die Benutzeroberfl&auml;che erledigen Sie dies im Dialog <b>Verkn&uuml;pfungseigenschaften<\/b>, den Sie vom Fenster <b>Beziehungen bearbeiten <\/b>aus &ouml;ffnen (s. Bild 9).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Standardwerte f&uuml;r LEFT und RIGHT JOIN<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Beziehung mit LEFT JOIN im Datenbankfenster<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_06\/BeziehungenPerDAO-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Abfrage auf Basis einer mit dbRelationLeft versehenen Beziehung<\/span><\/b><\/p>\n<p>Der Vollst&auml;ndigkeit halber hier noch die Definition von <b>LEFT JOIN<\/b>&#8211; und <b>RIGHT JOIN<\/b>-Abfragen\/Beziehungen: Die Bezeichnungen beziehen sich immer auf Beziehungen, bei denen die Mastertabelle, also die Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld, sich links und bei denen sich die Detailtabelle rechts befindet. <b>LEFT JOIN <\/b>bedeutet dann, dass eine Abfrage alle Datens&auml;tze der linken Tabelle zur&uuml;ckliefert, aber nur die vorhandenen Werte der rechten Tabelle. Falls es also Artikel ohne Kategorie gibt, liefert die Abfrage auch diese zur&uuml;ck. Ohne Festlegen des <b>LEFT JOIN <\/b>w&uuml;rden nur die Artikel zur&uuml;ckgeliefert werden, f&uuml;r die es eine Kategorie gibt &#8211; und umgekehrt (in der Beispieltabelle muss eine Kategorie ausgew&auml;hlt werden, der <b>LEFT JOIN <\/b>wird also ohnehin alle Datens&auml;tze liefern).<\/p>\n<p><b>Beziehungen anlegen<\/b><\/p>\n<p>Mit den DAO-Mitteln k&ouml;nnen Sie nat&uuml;rlich auch Beziehungen anlegen. Dazu ben&ouml;tigen Sie zun&auml;chst einmal die Methode <b>CreateRelation <\/b>des <b>Database<\/b>-Objekts. Diesem k&ouml;nnen Sie bereits folgende Parameter &uuml;bergeben:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Name<\/b>: Name der Beziehung (ist in der Benutzeroberfl&auml;che nicht sichtbar)<\/li>\n<li class=\"aufz-hlung\"><b>Table<\/b>: Name der Mastertabelle<\/li>\n<li class=\"aufz-hlung\"><b>ForeignTable<\/b>: Name der Detailtabelle<\/li>\n<li class=\"aufz-hlung\"><b>Attributes<\/b>: Zahlenwert, der die Eigenschaften der Beziehung festlegt und der Summe der weiter oben bereits vorgestellten Konstanten entspricht<\/li>\n<\/ul>\n<p>Nach dem Anlegen des <b>Relation<\/b>-Objekts speichern Sie dieses in einer entsprechenden Objektvariablen. Der Grund ist, dass noch weitere Schritte n&ouml;tig sind &#8211; beispielsweise das Festlegen der an der Beziehung beteiligten Felder und das Anh&auml;ngen der Felder und der Beziehung an die entsprechenden Auflistungen. Genau genommen f&uuml;gen Sie der Beziehung nur ein <b>Field<\/b>-Objekt hinzu, das aber mit den beiden Eigenschaften <b>Name <\/b>und <b>ForeignName <\/b>festlegt, welches Feld der Master- und welches der Detailtabelle an der Beziehung beteiligt ist. Das Hinzuf&uuml;gen erfolgt in zwei Schritten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Die Methode <b>CreateField <\/b>des <b>Relation<\/b>-Objekts erstellt das <b>Field<\/b>-Objekt.<\/li>\n<li class=\"aufz-hlung\">Dieses schwebt nun allerdings noch frei in der Luft: Also binden wir es mit der <b>Append<\/b>-Methode des <b>Relation<\/b>-Objekts an die Beziehung.<\/li>\n<\/ul>\n<p>Die Beziehung ist nun erstellt, allerdings ist auch sie noch nicht an das &uuml;bergeordnete Objekt gebunden. Dazu rufen Sie die <b>Append<\/b>-Methode der <b>Relations<\/b>-Auflistung des <b>Database<\/b>-Objekts auf und &uuml;bergeben als Parameter den Objektverweis auf das frisch erstellte und best&uuml;ckte <b>Relation<\/b>-Objekt. Die komplette Prozedur zum Anlegen einer Beziehung finden Sie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-45-anchor\">Listing 2<\/a><\/span>.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Anlegen einer Beziehung per VBA<\/p>\n<pre>Public Sub BeziehungAnlegen(strName As String, strMastertabelle As String, strDetailtabelle As String, _\r\nstrPrimaerschluesselfeld As String, strFremdschluesselfeld As String, lngAttribute As Long)\r\n    Dim db As DAO.Database\r\n    Dim rel As DAO.Relation\r\n    Dim fld As DAO.Field\r\n    Set db = CurrentDb\r\n    Set rel = db.CreateRelation(strName, strMastertabelle, strDetailtabelle, lngAttribute)\r\n    With rel\r\n        Set fld = .CreateField(strPrimaerschluesselfeld, dbLong)\r\n        With fld\r\n            .Name = strPrimaerschluesselfeld\r\n            .ForeignName = strFremdschluesselfeld\r\n        End With\r\n    End With\r\n    rel.Fields.Append fld\r\n    db.Relations.Append rel\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p><b>Beziehungen l&ouml;schen<\/b><\/p>\n<p>Auch das L&ouml;schen einer Beziehung l&auml;sst sich in einer VBA-Prozedur abbilden:<\/p>\n<pre>Public Sub BeziehungenLoeschen()\r\n    Dim db As DAO.Database\r\n    Dim i As Integer\r\n    Set db = CurrentDb\r\n    For i = db.Relations.Count - 1 To 0 Step -1\r\n        db.Relations.Delete db.Relations(i).Name\r\n    Next i\r\n    Set db = Nothing\r\nEnd Sub<\/pre>\n<p>Dabei ist nur die Besonderheit zu beachten, dass die Auflistung nicht per <b>For Each<\/b>-, sondern per <b>For&#8230;Next<\/b>-Schleife durchlaufen wird &#8211; und zwar von hinten nach vorne.<\/p>\n<p>Dies ist notwendig, weil sich der Index beim L&ouml;schen &auml;ndert und so nicht alle Elemente in einem Durchlauf erfasst werden k&ouml;nnen. Geschieht dies r&uuml;ckw&auml;rts, erwischen Sie jedoch gleich alle zu l&ouml;schenden Elemente.<\/p>\n<p><b>Fremdschl&uuml;sselfelder einer Tabelle<\/b><\/p>\n<p>Da die Relationen nicht als Eigenschaften der Tabellen gespeichert werden, m&uuml;ssen Sie einen kleinen Umweg gehen, wenn Sie beispielsweise die Fremdschl&uuml;sselfelder einer Tabelle ermitteln wollen. Wie das genau funktioniert, zeigt die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-46-anchor\">Listing 3<\/a><\/span>. Die Funktion erwartet den Namen der zu untersuchenden Tabelle und liefert eine Semikolon-separierte Liste der Fremdschl&uuml;sselfelder zur&uuml;ck. Dabei durchl&auml;uft die Prozedur in einer &auml;u&szlig;eren Schleife zun&auml;chst alle Felder der Tabelle. In den beiden inneren Schleifen werden alle <b>Relation<\/b>&#8211; und die enthaltenen <b>Field<\/b>-Elemente durchlaufen. Entspricht der Tabellenname der Detailtabelle und das Fremdschl&uuml;sselfeld dem Feldnamen, handelt es sich um ein Fremdschl&uuml;sselfeld in der als Parameter angegebenen Tabelle.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Anlegen einer Beziehung per VBA<\/p>\n<pre>Public Function FremdschluesselfelderErmitteln(strTabelle As String) As String\r\n    Dim db As DAO.Database\r\n    Dim rel As DAO.Relation\r\n    Dim fld As DAO.Field, fldRelation As DAO.Field\r\n    Dim tdf As DAO.TableDef\r\n    Dim strRelations As String\r\n    Set db = CurrentDb\r\n    Set tdf = db.TableDefs(strTabelle)\r\n    For Each fld In tdf.Fields\r\n        For Each rel In db.Relations\r\n            For Each fldRelation In rel.Fields\r\n                If rel.ForeignTable = strTabelle And fldRelation.ForeignName = fld.Name Then\r\n                    strRelations = strRelations &amp; &quot;;&quot; &amp; fld.Name\r\n                End If\r\n            Next fldRelation\r\n        Next rel\r\n    Next fld\r\n    If Len(strRelations) &gt; 0 Then FremdschluesselfelderErmitteln = Mid(strRelations, 2)\r\nEnd Function<\/pre>\n<p>Die Namen aller gefundenen Fremdschl&uuml;sselfelder werden zu einer per Semikolon getrennten Zeichenkette zusammengef&uuml;gt und als Ergebnis der Funktion zur&uuml;ckgeliefert.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TabellenUndBeziehungenKopieren.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{3B70CEE5-8EAF-4401-A689-E9C5F6513519}\/aiu_807.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beziehungen legt man normalerweise &uuml;ber das Beziehungsfenster an &#8211; oder man bem&uuml;ht den Nachschlage-Assistent, der zus&auml;tzlich zum Nachschlagefeld auch noch die Beziehung erstellt. Manche Anforderungen verlangen jedoch, dass man Beziehungen per VBA erstellt oder diese ausliest. In diesem Beitrag finden Sie daher alles, was Sie zum Thema Beziehungen und DAO wissen m&uuml;ssen.<\/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":[662011,66062011,44000025],"tags":[],"class_list":["post-55000807","post","type-post","status-publish","format-standard","hentry","category-662011","category-66062011","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Beziehungen per DAO verwalten - 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\/Beziehungen_per_DAO_verwalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Beziehungen per DAO verwalten\" \/>\n<meta property=\"og:description\" content=\"Beziehungen legt man normalerweise &uuml;ber das Beziehungsfenster an - oder man bem&uuml;ht den Nachschlage-Assistent, der zus&auml;tzlich zum Nachschlagefeld auch noch die Beziehung erstellt. Manche Anforderungen verlangen jedoch, dass man Beziehungen per VBA erstellt oder diese ausliest. In diesem Beitrag finden Sie daher alles, was Sie zum Thema Beziehungen und DAO wissen m&uuml;ssen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:59:12+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97\" \/>\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=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Beziehungen per DAO verwalten\",\"datePublished\":\"2020-05-22T21:59:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/\"},\"wordCount\":1502,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6261c6c8e4f34697abeb95e06fbd7e97\",\"articleSection\":[\"2011\",\"6\\\/2011\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/\",\"name\":\"Beziehungen per DAO verwalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6261c6c8e4f34697abeb95e06fbd7e97\",\"datePublished\":\"2020-05-22T21:59:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6261c6c8e4f34697abeb95e06fbd7e97\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6261c6c8e4f34697abeb95e06fbd7e97\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Beziehungen_per_DAO_verwalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Beziehungen per DAO verwalten\"}]},{\"@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":"Beziehungen per DAO verwalten - 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\/Beziehungen_per_DAO_verwalten\/","og_locale":"de_DE","og_type":"article","og_title":"Beziehungen per DAO verwalten","og_description":"Beziehungen legt man normalerweise &uuml;ber das Beziehungsfenster an - oder man bem&uuml;ht den Nachschlage-Assistent, der zus&auml;tzlich zum Nachschlagefeld auch noch die Beziehung erstellt. Manche Anforderungen verlangen jedoch, dass man Beziehungen per VBA erstellt oder diese ausliest. In diesem Beitrag finden Sie daher alles, was Sie zum Thema Beziehungen und DAO wissen m&uuml;ssen.","og_url":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:59:12+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Beziehungen per DAO verwalten","datePublished":"2020-05-22T21:59:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/"},"wordCount":1502,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97","articleSection":["2011","6\/2011","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/","url":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/","name":"Beziehungen per DAO verwalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97","datePublished":"2020-05-22T21:59:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/6261c6c8e4f34697abeb95e06fbd7e97"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Beziehungen_per_DAO_verwalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Beziehungen per DAO verwalten"}]},{"@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\/55000807","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=55000807"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000807\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}