{"id":55001424,"date":"2024-08-01T00:00:00","date_gmt":"2024-08-01T09:52:55","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1424"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"mnDaten_wie_im_mehrwertigen_Feld_selektieren","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/","title":{"rendered":"m:n-Daten wie im mehrwertigen Feld selektieren"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_001.png\" alt=\"Beispiel f&uuml;r ein mehrwertiges Feld\" width=\"499,5589\" height=\"287,3402\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beispiel f&uuml;r ein mehrwertiges Feld<\/span><\/b><\/p>\n<p><b>In einem anderen Beitrag namens &#8222;Mehrwertige Felder mit Wertliste loswerden&#8220; (www.access-im-unternehmen.de\/13) beschreiben wir, wie man die in Access 2010 eingef&uuml;hrten mehrwertige Felder durch m:n-Beziehungen ersetzt. Es fehlt dann allerdings die praktische Liste mit Kontrollk&auml;stchen, mit der man einen oder mehrere der zu verkn&uuml;pfenden Elemente einfach markieren kann. Auf diese Weise lassen sich schnell die Kategorien zu einem Produkt oder auch die Ausstattungen f&uuml;r Fahrzeuge zusammenklicken. Da f&uuml;r uns das Motto &#8222;Wer A sagt, muss auch B sagen&#8220; gilt, liefern wir also noch eine M&ouml;glichkeit hinterher, um die aus den mehrwertigen Feldern in eine m:n-Beziehung &uuml;berf&uuml;hrten Daten auf praktische Weise anzuzeigen.<\/b><\/p>\n<p>Dabei verwenden wir die Beispiele, die wir in dem oben genannten Beitrag <b>Mehrwertige Felder mit Wertliste loswerden <\/b>(<b>www.access-im-unternehmen.de\/13<\/b>) verwendet haben. Wir beginnen wieder mit den Produkten und ihren Kategorien. In der Beispieldatenbank finden wir in der Tabelle <b>tblProdukte <\/b>noch das Feld <b>Kategorien<\/b>, das als mehrwertiges Feld mit einer Wertliste als Datensatzherkunft ausgestattet ist (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_001.png\" alt=\"Beispiel f&uuml;r ein mehrwertiges Feld\" width=\"499,5589\" height=\"287,3402\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beispiel f&uuml;r ein mehrwertiges Feld<\/span><\/b><\/p>\n<p>Wenn wir diese Tabelle als Datensatzquelle f&uuml;r ein Formular verwenden, alle Felder in den Detailbereich ziehen und dann noch das Feld Kategorien in ein Listenfeld umwandeln, erhalten wir eine Ansicht wie in Bild 2. Das ist sehr praktisch und eine sch&ouml;ne Alternative zu den &uuml;brigen M&ouml;glichkeiten, eine m:n-Beziehung abzubilden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_002.png\" alt=\"Beispiel f&uuml;r ein als Listenfeld abgebildetes mehrwertiges Feld\" width=\"424,5589\" height=\"313,0222\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Beispiel f&uuml;r ein als Listenfeld abgebildetes mehrwertiges Feld<\/span><\/b><\/p>\n<p>Nun haben wir allerdings das mehrwertige Feld durch eine m:n-Beziehung ersetzt, in der alle Kategorien in der Tabelle <b>tblKategorien <\/b>gespeichert werden und in der die Verkn&uuml;pfungstabelle <b>tblProdukteKategorien <\/b>die Zuordnung von Produkten zu Kategorien aufnimmt (siehe Bild 3). Damit erhalten wir ein Datenmodell, das wir nicht nur komplett steuern k&ouml;nnen (das mehrwertige Feld wurde intern von Access verwaltet). Wir k&ouml;nnen ein solches Datenmodell auch zum SQL Server &uuml;berf&uuml;hren. Dies w&auml;re mit einem mehrwertigen Feld nicht m&ouml;glich gewesen &#8211; hier w&uuml;rden zwar die f&uuml;r ein Produkt ausgew&auml;hlten Kategorien &uuml;bernommen werden, aber die Liste aller Kategorien und die Auswahlm&ouml;glichkeit fallen unter den Tisch.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_003.png\" alt=\"Die aufgeteilten Daten eines mehrwertigen Feldes\" width=\"549,559\" height=\"193,064\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die aufgeteilten Daten eines mehrwertigen Feldes<\/span><\/b><\/p>\n<p>Das Ziel dieses Beitrags ist es nun, die Daten im Formular so abzubilden, wie es zuvor beim mehrwertigen Feld in der Ausf&uuml;hrung als Listenfeld mit Kontrollk&auml;stchen der Fall war.<\/p>\n<p>In einem Listenfeld werden wir das nicht abbilden k&ouml;nnen, denn dieses erlaubt nicht die Verwendung von Kontrollk&auml;stchen. Hier k&ouml;nnten wir allenfalls alle f&uuml;r das aktuelle Produkt ausgew&auml;hlten Kategorien markieren. Alternativ k&ouml;nnten wir auch noch das <b>ListView<\/b>-Steuerelement nutzen, das ein Kontrollk&auml;stchen je Eintrag anzeigen kann. Aber wir wollen in diesem Fall mit Access-Bordmitteln auskommen.<\/p>\n<p>Wie also k&ouml;nnen wir das erledigen? Die einzigen beiden M&ouml;glichkeiten, Datens&auml;tze inklusive Kontrollk&auml;stchen darzustellen, sind die Endlosansicht und die Datenblattansicht eines Formulars beziehungsweise Unterformulars.<\/p>\n<p>Bei der Datenblattansicht werden allerdings zwingend die Spalten&uuml;berschriften angezeigt. Da wir eine m&ouml;glichst genaue Abbildung des mehrwertigen Listenfeldes erhalten wollen, f&auml;llt diese Variante also weg. Es bleibt noch die Verwendung der Endlosansicht. Diese bietet au&szlig;erdem alle gestalterischen M&ouml;glichkeiten.<\/p>\n<h2>&Uuml;berlegungen zur Darstellung der zugeordneten Datei<\/h2>\n<p>Bevor wir loslegen, m&uuml;ssen wir uns &uuml;berlegen, wie wir die Darstellung erhalten. In einer herk&ouml;mmlichen Konstellation aus Haupt- und Unterformular zur Darstellung einer m:n-Beziehung landet die m-Tabelle, in diesem Beispiel die Tabelle <b>tblProdukte<\/b>, im Hauptformular. Im Unterformular bilden wir die Daten der Verkn&uuml;pfungstabelle ab, gegebenenfalls erweitert um die Daten der n-Tabelle. Das Unterformular-Steuerelement wird so eingerichtet, dass das Unterformular immer nur die Datens&auml;tze der m:n-Tabelle anzeigt, die mit dem Datensatz im Hauptformular verkn&uuml;pft sind.<\/p>\n<p>Wir k&ouml;nnen &uuml;blicherweise mit Haupt- und Unterformular also immer nur alle verkn&uuml;pften Datens&auml;tze der n-Tabelle anzeigen. Wir wollen aber alle Datens&auml;tze der n-Tabelle anzeigen und f&uuml;r diejenigen, die &uuml;ber die m:n-Verkn&uuml;pfungstabelle dem aktuell angezeigten Datensatz der m-Tabelle zugeordnet sind, ein markiertes Kontrollk&auml;stchen hinzuf&uuml;gen. Das gelingt auf diesem zun&auml;chst eingeschlagenen Weg nicht.<\/p>\n<p>Stattdessen m&uuml;ssen wir eine Darstellung finden, die alle Datens&auml;tze der n-Tabelle anzeigt, hier <b>tblKategorien<\/b>, und die noch ein Kontrollk&auml;stchen hinzuf&uuml;gt, das die f&uuml;r den aktuellen Datensatz im Hauptformular selektierten Kategorien liefert. Wir haben es hin- und hergedreht und mit diversen Abfragetypen experimentiert. Wie haben keine praktikable L&ouml;sung gefunden. Also w&auml;hlen wir einen v&ouml;llig anderen Ansatz.<\/p>\n<h2>Alle Kategorien plus Markierung der zugeordneten Kategorien<\/h2>\n<p>Die einfachere, weil sichtbare L&ouml;sung ist die Verwendung einer tempor&auml;ren Tabelle. Diese nennen wir <b>tblKategorienSelektiert<\/b> und entwerfen sie wie in Bild 4. Neben den beiden Feldern <b>KategorieID <\/b>und <b>Kategorie <\/b>f&uuml;gen wir dieser das <b>Ja\/Nein<\/b>-Feld <b>Zugeordnet <\/b>hinzu. Das Feld <b>KategorieID <\/b>statten wir nicht mit der <b>Autowert<\/b>-Funktion aus, da wir die Werte f&uuml;r dieses Feld sp&auml;ter selbst eintragen wollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_005.png\" alt=\"Tempor&auml;re Tabelle\" width=\"499,5589\" height=\"344,8512\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Tempor&auml;re Tabelle<\/span><\/b><\/p>\n<p>Diese Tabelle f&uuml;gen wir dem Unterformular hinzu und sorgen per Code daf&uuml;r, dass diese beim Anzeigen eines Produkt-Datensatzes im Hauptformular jeweils geleert und neu gef&uuml;llt wird.<\/p>\n<h2>Hauptformular erstellen<\/h2>\n<p>Dieses Endlosansicht legen wir in einem Unterformular an. Als Erstes erstellen wir das Hauptformular f&uuml;r unsere L&ouml;sung. Dieses verwendet die Tabelle <b>tblProdukte<\/b> als Datensatzquelle. Aus der Tabelle ziehen wir die beiden Felder <b>ProduktID <\/b>und <b>Produktname <\/b>in den Detailbereich des Formulars (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_004.png\" alt=\"Anlegen des Hauptformulars\" width=\"499,5589\" height=\"372,9102\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Anlegen des Hauptformulars<\/span><\/b><\/p>\n<h2>Unterformular erstellen<\/h2>\n<p>Nun erstellen wir das Unterformular namens <b>sfmProdukteKategorien<\/b>. Diesem weisen wir die Tabelle <b>tblKategorienSelektiert <\/b>als Datensatzquelle zu und ziehen die beiden Felder <b>Zugeordnet <\/b>und <b>Kategorie <\/b>in den Detailbereich des Formulars. <\/p>\n<p>Die beiden Bezeichnungsfelder, die beim Hineinziehen der Felder in den Detailbereich automatisch angelegt wurden, entfernen wir. Dann ordnen wir die verbleibenden beiden Steuerelemente wie im mehrwertigen Listenfeld an (siehe Bild 6). F&uuml;r das Textfeld <b>Kategorie<\/b> stellen wir die Eigenschaft <b>Horizontaler Anker <\/b>auf <b>Beide <\/b>ein, damit es beim Verbreitern des Steuerelements angepasst wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_006.png\" alt=\"Unterformular mit den Kategorien und der M&ouml;glichkeit zum Selektieren\" width=\"599,559\" height=\"295,3448\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Unterformular mit den Kategorien und der M&ouml;glichkeit zum Selektieren<\/span><\/b><\/p>\n<p>Schlie&szlig;lich stellen wir noch die Eigenschaft <b>Standardansicht <\/b>auf <b>Endlosformular <\/b>ein. Damit die &uuml;blichen Elemente eines Formulars ausgeblendet werden, stellen wir au&szlig;erdem die Eigenschaften <b>Datensatzmarkierer <\/b>und <b>Navigationsschaltfl&auml;chen <\/b>auf <b>Nein <\/b>ein. Die Eigenschaft <b>Trennlinien <\/b>ist in neueren Access-Versionen ohnehin bereits deaktiviert.<\/p>\n<p>Au&szlig;erdem zeigt das Formular seine Datens&auml;tze aktuell noch mit alternierender Hintergrundfarbe an. Das &auml;ndern wir, indem wir den Detailbereich des Unterformulars markieren und dort im Bereich <b>Format <\/b>die Eigenschaft <b>Alternative Hintergrundfarbe <\/b>auf den gleichen Wert einstellen wie die Eigenschaft <b>Hintergrundfarbe<\/b>.<\/p>\n<p>Um die Optik perfekt zu machen, entfernen wir noch den Rahmen des Textfeldes. Dazu stellen wir die Eigenschaft <b>Rahmenart <\/b>auf <b>Transparent <\/b>ein.<\/p>\n<p>Dieses Formular ziehen wir nun als Unterformular in das Formular <b>frmProdukteKategorien<\/b>. Das Ergebnis sieht wie in Bild 7 aus. Die beiden Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements sollten unbedingt leer sein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_007.png\" alt=\"Einbau des Unterformulars\" width=\"599,559\" height=\"404,248\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Einbau des Unterformulars<\/span><\/b><\/p>\n<p>Wechseln wir nun in die Formularansicht, erhalten wir schon einmal einen Einblick, wie das Formular sp&auml;ter aussehen k&ouml;nnte (siehe Bild 8). Allerdings ist das Unterformular noch leer. Dies &auml;ndern wir allerdings jetzt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_008.png\" alt=\"Das noch leere Unterformular in der Formularansicht\" width=\"424,5589\" height=\"309,2466\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Das noch leere Unterformular in der Formularansicht<\/span><\/b><\/p>\n<h2>Unterformular f&uuml;llen<\/h2>\n<p>Dazu hinterlegen wir f&uuml;r das Ereignis <b>Beim Anzeigen<\/b> des Hauptformulars die Ereignisprozedur aus Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblKategorienSelektiert\", dbFailOnError\r\n     db.Execute \"INSERT INTO tblKategorienSelektiert(KategorieID, Kategorie) SELECT KategorieID, Kategorie \" _\r\n         & \"FROM tblKategorien ORDER BY Kategorie ASC\", dbFailOnError\r\n     db.Execute \"UPDATE tblKategorienSelektiert SET Zugeordnet = -1 WHERE KategorieID IN (SELECT KategorieID \" _\r\n         & \"FROM tblProdukteKategorien WHERE ProduktID = \" & Me.ProduktID & \")\", dbFailOnError\r\n     Me.sfmProdukteKategorien.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: F&uuml;llen der Datensatzquelle des Unterformulars<\/span><\/b><\/p>\n<p>Diese Prozedur leert zun&auml;chst mit einer <b>DELETE<\/b>-Abfrage die Tabelle <b>tblKategorienSelektiert<\/b>, da sich in der Regel noch Daten vom zuvor angezeigten Datensatz darin befinden.<\/p>\n<p>Dann f&uuml;gt sie alle Eintr&auml;ge der Tabelle <b>tblKategorien <\/b>zur Tabelle <b>tblKategorienSelektiert <\/b>hinzu und sortiert die Kategorien dabei direkt alphabetisch. Dazu nutzen wir eine <b>INSERT INTO<\/b>-Abfrage, welche eine entsprechende <b>SELECT<\/b>-Anweisung auf Basis der Tabelle <b>tblKategorien<\/b> als Quelle verwendet.<\/p>\n<p>Im letzten Schritt f&uuml;llen wir noch das Feld <b>Zugeordnet<\/b>. Dazu verwenden wir eine <b>UPDATE<\/b>-Abfrage, in der wir das Feld <b>Zugeordnet <\/b>f&uuml;r die Datens&auml;tze auf <b>-1 <\/b>einstellen, deren Kategorie in der Tabelle <b>tblProdukteKategorien <\/b>dem aktuellen Produkt aus dem Hauptformular zugewiesen ist.<\/p>\n<p>Schlie&szlig;lich aktualisiert die Prozedur noch die Anzeige im Unterformular.<\/p>\n<p>Das Ergebnis sieht bereits sehr gut aus (siehe Bild 9). Allerdings wird noch ein neuer, leerer Datensatz angezeigt. Dies verhindern wir, indem wir f&uuml;r das Unterformular die Eigenschaft <b>Anf&uuml;gen zulassen <\/b>auf <b>Nein <\/b>einstellen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_009.png\" alt=\"Markierte Kategorien im Unterformular\" width=\"424,5589\" height=\"309,2466\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Markierte Kategorien im Unterformular<\/span><\/b><\/p>\n<p>Wir k&ouml;nnen nun sogar bereits Kategorien hinzuf&uuml;gen oder abw&auml;hlen. Allerdings werden die &Auml;nderungen nicht gespeichert &#8211; bei Wechsel zu einem anderen Datensatz und zur&uuml;ck finden wir wieder die zuvor markierten Eintr&auml;ge vor.<\/p>\n<h2>Speichern von &Auml;nderungen<\/h2>\n<p>Das ist auch logisch: Wir haben keinen Mechanismus vorgesehen, der &Auml;nderungen speichert &#8211; au&szlig;er der, durch den &Auml;nderungen automatisch in der als Datensatzquelle verwendeten Tabelle gespeichert werden. Da diese aber bei jedem Datensatzwechseln geleert und neu gef&uuml;llt wird, sind die &Auml;nderungen nicht persistent.<\/p>\n<p>Das &auml;ndern wir nun, indem wir ein Ereignis f&uuml;r das Kontrollk&auml;stchen-Steuerelement im Unterformular hinzuf&uuml;gen. Hier testen wir erst einmal, ob wir alle relevanten Daten erhalten:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Zugeordnet_AfterUpdate()\r\n     <span style=\"color:blue;\">Debug.Print<\/span> Me.Zugeordnet, Me.KategorieID, _\r\n         Me.Parent.ProduktID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Ausgabe liefert den aktuellen Wert, die Kategorie und das Produkt. Die gewonnenen Informationen m&uuml;ssen wir nun noch in der Tabelle <b>tblProdukteKategorien<\/b> hinterlegen. Dazu passen wir die Prozedur wie in Listing 2 an.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Zugeordnet_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span>Me.Zugeordnet = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         strSQL = \"INSERT INTO tblProdukteKategorien(ProduktID, KategorieID) VALUES(\" & Me.Parent.ProduktID _\r\n             & \", \" & Me!KategorieID & \")\"\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strSQL = \"DELETE FROM tblProdukteKategorien WHERE ProduktID = \" & Me.Parent.ProduktID _\r\n             & \" AND KategorieID = \" & Me.KategorieID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     db.Execute strSQL, dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Aktualisieren der Tabelle tblProdukteKategorien<\/span><\/b><\/p>\n<p>Die Prozedur pr&uuml;ft, ob das Feld <b>Zugeordnet <\/b>auf <b>True <\/b>oder <b>False <\/b>eingestellt wurde. Im Fall von <b>True <\/b>soll ein neuer Datensatz zur Tabelle <b>tblProdukteKategorien <\/b>hinzugef&uuml;gt werden, der die <b>KategorieID <\/b>der soeben aktivierten Kategorie und die <b>ProduktID <\/b>des im Hauptformular angezeigten Produkts enth&auml;lt. Das erledigt die Prozedur mit der entsprechenden <b>INSERT INTO<\/b>-Anweisung.<\/p>\n<p>Wenn das Feld <b>Zugeordnet <\/b>nun den Wert <b>False <\/b>enth&auml;lt, soll der passende Datensatz aus der Tabelle <b>tblProdukteKategorien <\/b>entfernt werden. Dazu verwendet die Prozedur eine <b>DELETE<\/b>-Anweisung, die den Datensatz mit den entsprechenden Daten in den Feldern <b>ProduktID <\/b>und <b>KategorieID <\/b>l&ouml;scht.<\/p>\n<h2>Problem neuer Datensatz<\/h2>\n<p>Die L&ouml;sung l&auml;uft damit soweit problemlos. Nach dem &Ouml;ffnen des Formulars und beim Anzeigen eines anderen Datensatz zeigt es die richtigen zugeordneten Kategorien an. Das Aus- und Abw&auml;hlen von Kategorien wird korrekt in der Datenbank gespeichert.<\/p>\n<p>Nur beim Hinzuf&uuml;gen eines Datensatzes gibt es einen Fehler (siehe Bild 10). Dieser r&uuml;hrt daher, dass es bei Anzeigen eines neuen, leeren Datensatzes im Hauptformular noch keinen Wert im Feld <b>ProduktID <\/b>gibt. Dies beheben wir, indem wir in der fehlerhaften Anweisung den Ausdruck <b>Me!ProduktID <\/b>durch <b>Nz(Me!ProduktID, 0) <\/b>ersetzen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_010.png\" alt=\"Fehler beim Hinzuf&uuml;gen eines neuen Datensatzes im Hauptformular\" width=\"549,559\" height=\"333,7866\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Fehler beim Hinzuf&uuml;gen eines neuen Datensatzes im Hauptformular<\/span><\/b><\/p>\n<pre>db.Execute \"UPDATE tblKategorienSelektiert SET Zugeordnet = -1 WHERE KategorieID IN (SELECT KategorieID FROM tblProdukteKategorien WHERE ProduktID = \" & Nz(Me!ProduktID, 0) & \")\", dbFailOnError<\/pre>\n<p>Und wenn wir eine Kategorie f&uuml;r einen neuen, noch leeren Datensatz hinzuf&uuml;gen wollen, erhalten wir ebenfalls einen Fehler. Dieser wird in der Prozedur <b>Zugeordnet_AfterUpdate <\/b>ausgel&ouml;st und resultiert ebenfalls daraus, dass noch keine <b>ProduktID <\/b>vorliegt. Dadurch soll eine Abfrage wie die folgende ausgef&uuml;hrt werden:<\/p>\n<pre>INSERT INTO tblProdukteKategorien(ProduktID, KategorieID) VALUES(, 3)<\/pre>\n<p>Hier wollen wir schlicht verhindern, dass der Benutzer eine Kategorie zuweisen kann, bevor er einen Datensatz im Hauptformular hinzugef&uuml;gt hat.<\/p>\n<p>Dazu f&uuml;gen wir eine weitere Ereignisprozedur zum Kontrollk&auml;stchen <b>Zugeordnet <\/b>hinzu, und zwar f&uuml;r das Ereignis <b>Vor Aktualisierung<\/b>. Die Prozedur aus Listing 3 pr&uuml;ft, ob das Hauptformular einen neuen, leeren Datensatz enth&auml;lt. In diesem Fall gibt sie eine Meldung aus, macht die &Auml;nderung r&uuml;ckg&auml;ngig und setzt den Fokus auf ein Feld im Hauptformular. Au&szlig;erdem wird der Parameter <b>Cancel <\/b>auf <b>True <\/b>eingestellt, damit der Aktualisierungsvorgang abgebrochen und das Ereignis <b>Nach Aktualisierung <\/b>gar nicht erst ausgel&ouml;st wird.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Zugeordnet_BeforeUpdate(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span>Me.Parent.NewRecord = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Bitte legen Sie zun&auml;chst einen Datensatz im Hauptformular an.\", vbOKOnly + vbExclamation, _\r\n             \"Kein Datensatz\"\r\n         Me.Undo\r\n         Me.Parent.Produktname.SetFocus\r\n         Cancel = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Meldung, wenn der Benutzer versucht, eine Kategorie zu einem noch nicht vorhandenen Produkt hinzuzuf&uuml;gen<\/span><\/b><\/p>\n<h2>Kategorien deaktivieren<\/h2>\n<p>Bisher ist es noch m&ouml;glich, den Text der Kategorien im Unterformular zu ver&auml;ndern. Auch, wenn sich dies nicht auf die tats&auml;chlich gespeicherten Kategorien auswirkt, wollen wir dies verhindern. Dazu stellen wir die Eigenschaften <b>Aktiviert <\/b>des Textfeldes <b>Kategorie <\/b>auf <b>Nein <\/b>und <b>Gesperrt <\/b>auf <b>Ja <\/b>ein.<\/p>\n<h2>Einbau in eigene L&ouml;sungen<\/h2>\n<p>Nun ist diese Vorgehensweise nicht nur geeignet, um mehrwertige Listenfelder abzul&ouml;sen, sondern generell f&uuml;r alle m:n-Beziehungen, f&uuml;r die man sich eine solche Darstellung w&uuml;nscht. Voraussetzung aus Performance-Sicht ist allerdings, dass nicht allzu viele Datens&auml;tze in der verkn&uuml;pften Liste stecken, da diese bei jedem Datensatzwechsel neu gelesen werden.  Wir wollen die L&ouml;sung einsetzen f&uuml;r die drei Tabellen <b>tblFahrzeuge<\/b>, <b>tblFahrzeugeAusstattungen <\/b>und <b>tblAusstattungen<\/b> (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_011.png\" alt=\"Eine weitere m:n-Beziehung, um die L&ouml;sung anzupassen\" width=\"574,559\" height=\"190,612\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Eine weitere m:n-Beziehung, um die L&ouml;sung anzupassen<\/span><\/b><\/p>\n<p>Welche Schritte sind also zu tun, wenn wir dieses Unterformular schnell zu einem Formular in einer anderen Anwendung einf&uuml;gen wollen?<\/p>\n<ul>\n<li>Lege eine Kopie der Tabelle <b>tblKategorienSelektiert <\/b>an, zum Beispiel unter dem Namen <b>tblAusstattungenSelektiert<\/b>.<\/li>\n<li>&Auml;ndere die Namen der Felder <b>KategorieID <\/b>und <b>Kategorie <\/b>entsprechend auf <b>AusstattungID <\/b>und <b>Ausstattung<\/b> (siehe Bild 12).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_012.png\" alt=\"Die neue Tabelle tblAusstattungenSelektiert\" width=\"524,559\" height=\"407,8831\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Die neue Tabelle tblAusstattungenSelektiert<\/span><\/b><\/p>\n<li>Lege ein Formular an, das die Daten der m-Seite der Tabelle enth&auml;lt, zum Beispiel <b>frmFahrzeugeAusstattungen<\/b>.<\/li>\n<li>F&uuml;ge die gew&uuml;nschten Felder aus der Feldliste zum Formularentwurf hinzu.<\/li>\n<li>Kopiere das Unterformular <b>sfmProdukteKategorien <\/b>in ein Formular namens <b>sfmFahrzeugeAusstattungen<\/b>.<\/li>\n<li>Passe den Namen und Steuerelementinhalt des Textfeldes <b>Kategorie <\/b>auf <b>Ausstattung <\/b>an.<\/li>\n<li>Ziehe das neue Unterformular in das Hauptformular.<\/li>\n<li>F&uuml;ge die Prozedur aus Listing 4 f&uuml;r das Ereignis <b>Beim Anzeigen <\/b>des Hauptformulars hinzu.<\/li>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblAusstattungenSelektiert\", dbFailOnError\r\n     db.Execute \"INSERT INTO tblAusstattungenSelektiert(AusstattungID, Ausstattung) \" _\r\n         & \"SELECT AusstattungID, Ausstattung FROM tblAusstattungen ORDER BY Ausstattung ASC\", dbFailOnError\r\n     db.Execute \"UPDATE tblAusstattungenSelektiert SET Zugeordnet = -1 WHERE AusstattungID IN (SELECT AusstattungID \" _\r\n         & \"FROM tblFahrzeugeAusstattungen WHERE FahrzeugID = \" & Nz(Me!FahrzeugID, 0) & \")\", dbFailOnError\r\n     Me!sfmFahrzeugeAusstattungen.Form.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Aktualisieren der Daten im Unterformular<\/span><\/b><\/p>\n<li>Passe die Prozeduren f&uuml;r die Ereignisse <b>Vor Aktualisierung <\/b>und <b>Nach Aktualisierung <\/b>f&uuml;r das Steuerelement <b>Zugeordnet <\/b>im Unterformular wie in Listing 5 an.<\/li>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Zugeordnet_BeforeUpdate(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span>Me.Parent.NewRecord = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Bitte legen Sie zun&auml;chst einen Datensatz im Hauptformular an.\", vbOKOnly + vbExclamation, \"Kein Datensatz\"\r\n         Me.Undo\r\n         Me.Parent.Fahrzeug.SetFocus\r\n         Cancel = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>Zugeordnet_AfterUpdate()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span>Me!Zugeordnet = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         strSQL = \"INSERT INTO tblFahrzeugeAusstattungen(FahrzeugID, AusstattungID) VALUES(\" & Me.Parent.FahrzeugID _\r\n             & \", \" & Me!AusstattungID & \")\"\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strSQL = \"DELETE FROM tblFahrzeugeAusstattungen WHERE FahrzeugID = \" & Me.Parent.FahrzeugID _\r\n             & \" AND AusstattungID = \" & Me!AusstattungID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     db.Execute strSQL, dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Aktionen, die beim Zuordnen und Abw&auml;hlen von Ausstattungen ausgef&uuml;hrt werden<\/span><\/b><\/p>\n<\/ul>\n<p>Danach sieht das Formular wie in Bild 13 aus und wir k&ouml;nnen damit die Ausstattungen zu den einzelnen Fahrzeugen hinzuf&uuml;gen und wieder entfernen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_04\/pic_1424_013.png\" alt=\"Das neue Formular\" width=\"324,5589\" height=\"379,4012\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Das neue Formular<\/span><\/b><\/p>\n<h2>Kategorien beziehungsweise Ausstattungen verwalten<\/h2>\n<p>Das mehrwertige Listenfeld beziehungsweise Kombinationsfeld blendet noch eine Schaltfl&auml;che ein, wenn die Inhalte &uuml;ber die Benutzeroberfl&auml;che bearbeitet werden k&ouml;nnen. Ein Klick auf diese Schaltfl&auml;che zeigt ein Fenster an, mit dem wir neue Eintr&auml;ge hinzuf&uuml;gen und die vorhandenen Eintr&auml;ge bearbeiten oder l&ouml;schen k&ouml;nnen. Dabei kann man dort auch Eintr&auml;ge entfernen, die bereits mit Elementen der m-Seite der Beziehung verkn&uuml;pft sind. Das wollen wir nat&uuml;rlich unterbinden. Daher bieten wir neben dem Unterformular eine einfache Schaltfl&auml;che an, die ein Formular zum Bearbeiten der Kategorien erlaubt. Dieses Formular beschreiben wir in einem separaten Beitrag namens Mehrwertige m:n-Lookupdaten verwalten (www.access-im-unternehmen.de\/1511).<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag beschreibt, wie wir die Daten aus m:n-Beziehungen und insbesondere die, die wir aus mehrwertigen Feldern in eine solche &uuml;berf&uuml;hrt haben, in einem Formular bearbeiten k&ouml;nnen.<\/p>\n<p>Das Ziel war, dass wir die gleiche Darstellung wie in einem Listenfeld erhalten, das die Daten eines mehrwertigen Feldes anzeigt &#8211; also mit allen vorhandenen Eintr&auml;gen der Lookuptabelle und mit der M&ouml;glichkeit, diese durch das Setzen eines Hakens in einem Kontrollk&auml;stchen zuzuordnen. Einer der Gr&uuml;nde f&uuml;r das &Uuml;berf&uuml;hren des mehrwertigen Feldes in die Tabellen einer m:n-Beziehung ist die Kompatibilit&auml;t mit dem SQL Server.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MnDatenWieImMehrwertigenFeldSelektieren.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/3B52ABFC-F9B6-43D2-A98B-9C11E49AEFDF\/aiu_1424.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem anderen Beitrag namens &#8222;Mehrwertige Felder mit Wertliste loswerden&#8220; (www.access-im-unternehmen.de\/1493) beschreiben wir, wie man die in Access 2010 eingef&uuml;hrten mehrwertige Felder durch m:n-Beziehungen ersetzt. Es fehlt dann allerdings die praktische Liste mit Kontrollk&auml;stchen, mit der man einen oder mehrere der zu verkn&uuml;pfenden Elemente einfach markieren kann. Auf diese Weise lassen sich schnell die Kategorien zu einem Produkt oder auch die Ausstattungen f&uuml;r Fahrzeuge zusammenklicken. Da f&uuml;r uns das Motto &#8222;Wer A sagt, muss auch B sagen&#8220; gilt, liefern wir also noch eine M&ouml;glichkeit hinterher, um die aus den mehrwertigen Feldern in eine m:n-Beziehung &uuml;berf&uuml;hrten Daten auf praktische Weise anzuzeigen.<\/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":[662024,66042024,44000023],"tags":[],"class_list":["post-55001424","post","type-post","status-publish","format-standard","hentry","category-662024","category-66042024","category-Mit_Formularen_arbeiten"],"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>m:n-Daten wie im mehrwertigen Feld selektieren - 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\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"m:n-Daten wie im mehrwertigen Feld selektieren\" \/>\n<meta property=\"og:description\" content=\"In einem anderen Beitrag namens &quot;Mehrwertige Felder mit Wertliste loswerden&quot; (www.access-im-unternehmen.de\/1493) beschreiben wir, wie man die in Access 2010 eingef&uuml;hrten mehrwertige Felder durch m:n-Beziehungen ersetzt. Es fehlt dann allerdings die praktische Liste mit Kontrollk&auml;stchen, mit der man einen oder mehrere der zu verkn&uuml;pfenden Elemente einfach markieren kann. Auf diese Weise lassen sich schnell die Kategorien zu einem Produkt oder auch die Ausstattungen f&uuml;r Fahrzeuge zusammenklicken. Da f&uuml;r uns das Motto &quot;Wer A sagt, muss auch B sagen&quot; gilt, liefern wir also noch eine M&ouml;glichkeit hinterher, um die aus den mehrwertigen Feldern in eine m:n-Beziehung &uuml;berf&uuml;hrten Daten auf praktische Weise anzuzeigen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-01T09:52:55+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"m:n-Daten wie im mehrwertigen Feld selektieren\",\"datePublished\":\"2024-08-01T09:52:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/\"},\"wordCount\":2628,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/10ed841a331a42d083dc72bd4c43b108\",\"articleSection\":[\"2024\",\"4\\\/2024\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/\",\"name\":\"m:n-Daten wie im mehrwertigen Feld selektieren - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/10ed841a331a42d083dc72bd4c43b108\",\"datePublished\":\"2024-08-01T09:52:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/10ed841a331a42d083dc72bd4c43b108\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/10ed841a331a42d083dc72bd4c43b108\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"m:n-Daten wie im mehrwertigen Feld selektieren\"}]},{\"@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":"m:n-Daten wie im mehrwertigen Feld selektieren - 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\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/","og_locale":"de_DE","og_type":"article","og_title":"m:n-Daten wie im mehrwertigen Feld selektieren","og_description":"In einem anderen Beitrag namens \"Mehrwertige Felder mit Wertliste loswerden\" (www.access-im-unternehmen.de\/1493) beschreiben wir, wie man die in Access 2010 eingef&uuml;hrten mehrwertige Felder durch m:n-Beziehungen ersetzt. Es fehlt dann allerdings die praktische Liste mit Kontrollk&auml;stchen, mit der man einen oder mehrere der zu verkn&uuml;pfenden Elemente einfach markieren kann. Auf diese Weise lassen sich schnell die Kategorien zu einem Produkt oder auch die Ausstattungen f&uuml;r Fahrzeuge zusammenklicken. Da f&uuml;r uns das Motto \"Wer A sagt, muss auch B sagen\" gilt, liefern wir also noch eine M&ouml;glichkeit hinterher, um die aus den mehrwertigen Feldern in eine m:n-Beziehung &uuml;berf&uuml;hrten Daten auf praktische Weise anzuzeigen.","og_url":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/","og_site_name":"Access im Unternehmen","article_published_time":"2024-08-01T09:52:55+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"m:n-Daten wie im mehrwertigen Feld selektieren","datePublished":"2024-08-01T09:52:55+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/"},"wordCount":2628,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108","articleSection":["2024","4\/2024","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/","url":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/","name":"m:n-Daten wie im mehrwertigen Feld selektieren - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108","datePublished":"2024-08-01T09:52:55+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/10ed841a331a42d083dc72bd4c43b108"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/mnDaten_wie_im_mehrwertigen_Feld_selektieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"m:n-Daten wie im mehrwertigen Feld selektieren"}]},{"@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\/55001424","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=55001424"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001424\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}