{"id":55000706,"date":"2010-04-01T00:00:00","date_gmt":"2020-05-22T22:11:12","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=706"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Nachschlage_und_mehrwertige_Felder","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/","title":{"rendered":"Nachschlage- und mehrwertige Felder"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Access 2007 bringt einige Features, welche die Entwicklergemeinde spalten. Eines davon sind die mehrwertigen Felder, auch Multivalue Fields genannt: Sie erlauben dem Einsteiger, leicht mehrere Werte zu einem Nachschlagefeld einer Tabelle hinzuzuf&uuml;gen. Wir werfen einen genauen Blick auf dieses Feature, was auch f&uuml;r Gegner dieser Technik interessant sein d&uuml;rfte: Immerhin ist keiner davor gefeit, eine mit mehrwertigen Feldern gespickte Datenbank in eine mit sauberer Datenmodellierung zu &uuml;berf&uuml;hren &#8211; hier erfahren Sie deshalb auch, wie Sie an die Daten aus solchen Feldern herankommen.<\/b><\/p>\n<p>Der Ausgangspunkt f&uuml;r den Microsoft&#8220;schen Ansatz, mehrwertige Felder einzuf&uuml;hren, ist der Wunsch, Access-Einsteigern die Verwendung von Nachschlage- beziehungsweise Kombinationsfeldern m&ouml;glichst einfach zu machen. Dies aber nicht nur f&uuml;r die Verwendung von Daten aus 1:n-Beziehungen, sondern auch f&uuml;r m:n-Beziehungen!<\/p>\n<p>Das bedeutet prinzipiell, dass ein Feld mehrere Werte speichern kann. Ein Beispiel verdeutlicht dies: Wenn jeder Mitarbeiter eines Unternehmens an mehreren Projekten beteiligt sein kann, und jedes Projektteam wiederum aus einem oder mehrere Mitarbeitern besteht, dann verwenden Sie eine Mitarbeitertabelle, eine Projektetabelle und eine Verkn&uuml;pfungstabelle, mit der Sie die Mitarbeiter den Projekten zuweisen und umgekehrt (siehe Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Der herk&ouml;mmliche Weg, m:n-Beziehungen im Datenmodell nachzubilden<\/span><\/b><\/p>\n<p>Mehrwertige Felder bilden dies ohne die notwendigen Felder im Hintergrund nach und gleichzeitig gibt es auch noch eine Erweiterung von Kombinations- und Listenfeldern, die das Ausw&auml;hlen und Bearbeiten der enthaltenen Daten erlaubt.<\/p>\n<p><b>Nachschlagefelder in Access 2007<\/b><\/p>\n<p>Mit der Einf&uuml;hrung mehrwertiger Felder hat Microsoft gleich auch noch die Bedienung von Nachschlagefeldern und deren Einrichtung ver&auml;ndert. Beginnen wir mit einem einfachen Nachschlagefeld, das seine Werte aus einer Wertliste beziehen soll und per Nachschlage-Assistent hergestellt wird. Dort geben Sie zun&auml;chst an, dass Sie die im Nachschlagefeld anzuzeigenden Werte selbst eingeben, also eine Wertliste anlegen m&ouml;chten (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Festlegen einer Wertliste anstelle einer Tabelle oder Abfrage als Datensatzherkunft eines Nachschlagefelds<\/span><\/b><\/p>\n<p>Anschlie&szlig;end legen Sie fest, wie viele Spalten das Nachschlagefeld anzeigen soll und wie die enthaltenen Daten lauten (siehe Bild 3). Die Angabe eines Wertes gr&ouml;&szlig;er <b>1 <\/b>macht hier insofern Sinn, als dass man statt eines Kombinationsfelds als Nachschlagefeld auch gleich ein Listenfeld verwenden kann.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Festlegen der Spaltenzahl und eingeben der Werte des Nachschlagefeldes<\/span><\/b><\/p>\n<p>Schlie&szlig;lich legen Sie im dritten Schritt den Namen des Nachschlagefeldes fest und geben an, ob Sie jeweils nur einen oder mehrere Werte ausw&auml;hlen m&ouml;chten (siehe Bild 4) &#8211; sp&auml;ter w&auml;hlen wir die Option <b>Mehrere Werte <\/b>zulassen aus, um ein mehrwertiges Feld zu erstellen. Der Assistent hat alle notwendigen Eigenschaften eingestellt, damit Sie die beiden angegebenen Werte per Kombinationsfeld ausw&auml;hlen k&ouml;nnen (siehe Bild 5). Gegen&uuml;ber Access 2003 und &auml;lter finden Sie hier vier neue Eigenschaften vor:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Letzte Angaben vor Fertigstellung des Nachschlagefeldes<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Die Einstellung dieser Eigenschaften ist das Resultat des Nachschlage-Assistenten.<\/span><\/b><\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Mehrere Werte zulassen<\/b>: Legt fest, ob Sie nur einen oder mehrere Werte der Datenherkunft (Wertliste, Tabelle oder Abfrage) ausw&auml;hlen k&ouml;nnen (dies entspricht prinzipiell einer m:n-Beziehung).<\/li>\n<li class=\"aufz-hlung\"><b>Wertlistenbearbeitung zulassen<\/b>: Darf der Benutzer die Elemente einer Wertliste bearbeiten<\/li>\n<li class=\"aufz-hlung\"><b>Bearbeitungsformular f&uuml;r Listenelemente<\/b>: Hier k&ouml;nnen Sie ein Formular angeben, mit dem der Benutzer die enthaltenen Werte bearbeiten kann.<\/li>\n<\/ul>\n<p>Wenn Sie alle vier Eigenschaften auf <b>Nein<\/b> belassen beziehungsweise <b>Bearbeitungsformular f&uuml;r Listenelemente <\/b>leer lassen, bedient man das Nachschlagefeld wie in fr&uuml;heren Access-Versionen.<\/p>\n<p>Stellen Sie testweise zun&auml;chst die Eigenschaft <b>Wertlistenbearbeitung zulassen <\/b>auf den Wert <b>Ja <\/b>ein. Wenn Sie nun in die Datenblattansicht der Tabelle wechseln und das Nachschlagefeld aufklappen, erscheint ein kleines Symbol, &uuml;ber das Sie per Mausklick den Dialog aus Bild 6 &ouml;ffnen k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Komfortable Bearbeitung von Wertlisteneintr&auml;gen<\/span><\/b><\/p>\n<p>&auml;nderungen an der Liste werden klaglos in die semikola-separierte Eigenschaft <b>Wertliste <\/b>&uuml;bernommen, und auch die Eigenschaft <b>Standardwert <\/b>l&auml;sst sich hier komfortabel einstellen.<\/p>\n<p>Die Bearbeitung der Listenelemente ist auch in Formularen m&ouml;glich &#8211; am einfachsten aktivieren Sie dies, indem Sie <b>Wertlistenbearbeitung zulassen <\/b>im Tabellenentwurf auf <b>Ja <\/b>einstellen und das Formular einfach mit den Feldern der Wertliste f&uuml;llen, nachdem Sie als Datenherkunft die betroffene Tabelle angegeben haben. Sie k&ouml;nnen diese und weitere Eigenschaften dann aber f&uuml;r jedes Formular individuell einstellen (siehe Bild 7).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Die Eigenschaften bez&uuml;glich der Nachschlagefelder werden auf die Steuerelemente im Formular &uuml;bertragen.<\/span><\/b><\/p>\n<p><b>Nachteil bearbeitbarer Wertlisten<\/b><\/p>\n<p>Eine Wertliste sollten Sie wirklich nur dann einsetzen, wenn die enthaltenen Daten f&uuml;r alle Zeiten gleich bleiben. Bedenken Sie, dass es sich bei der Eigenschaft <b>Wertliste <\/b>prinzipiell um ein Element des Datenmodells handelt und dieses nicht so einfach durch den Benutzer ge&auml;ndert werden sollte. <\/p>\n<p>Der gro&szlig;e Nachteil bearbeitbarer Wertlisten ist, dass es keine M&ouml;glichkeit gibt, die vom Benutzer ge&auml;nderten Daten zu validieren. Der Eingabe redundanter und in der Folge inkonsistenter Daten ist also T&uuml;r und Tor ge&ouml;ffnet.<\/p>\n<p>Ein weiterer Nachteil resultiert aus der Beobachtung, dass der Inhalt der Wertliste unter bestimmten Umst&auml;nden, die wir sp&auml;ter aufdecken werden, in einer Eigenschaft eines Steuerelements steckt. Eine &auml;nderung der Wertliste erfordert das anschlie&szlig;ende Speichern des Formulars und somit eine &auml;nderung des Entwurfs eines Objekts &#8211; und das ist in der Runtime-Version von Access grunds&auml;tzlich nicht m&ouml;glich. Wenn Sie dem Benutzer Ihrer Datenbank also eine solche Funktion bereitstellen m&ouml;chten, ziehen Sie in Betracht, dass dies mit der Runtime nicht funktionieren wird.<\/p>\n<p><b>Vom Nachschlagefeld zum mehrwertigen Feld<\/b><\/p>\n<p>Als Beispiel f&uuml;r ein mehrwertiges Feld haben wir in der Beispieltabelle <b>tblMitarbeiter <\/b>das Feld <b>Funktionen <\/b>eingerichtet, aus dem mehrere Werte ausgew&auml;hlt werden k&ouml;nnen. Ausgehend von einem normalen Nachschlagefeld, das wie oben beschrieben per Assistent erstellt wurde, brauchen wir nur die Eigenschaft <b>Mehrere Werte zulassen <\/b>auf <b>Ja <\/b>einzustellen. Es erscheint dann eine Meldung, die besagt, dass dies nicht r&uuml;ckg&auml;ngig zu machen sei.<\/p>\n<p>Das Ergebnis sieht wie in Bild 8 aus. W&auml;hlt man die Listeneintr&auml;ge wie in dieser Abbildung aus, erscheinen diese anschlie&szlig;end in der folgenden Form als Feldinhalt:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Ein mehrwertiges Feld<\/span><\/b><\/p>\n<pre>Kaffeekocher; M&auml;dchen f&uuml;r alles; Programmierer<\/pre>\n<p><b>Im Hintergrund<\/b><\/p>\n<p>Gehen wir ein wenig in die Tiefe und schauen uns an, was sich in den Systemtabellen getan hat. Dazu aktivieren wir zun&auml;chst deren Anzeige, indem wir aus dem Kontextmen&uuml; der &Uuml;berschrift des Navigationsbereichs den Eintrag <b>Navigationsoptionen&#8230; <\/b>ausw&auml;hlen und dort die Option <b>Systemobjekte anzeigen <\/b>aktivieren.<\/p>\n<p>Im Navigationsbereich erschienen nun einige zuvor nicht sichtbare Tabellen, von denen uns zun&auml;chst die Tabelle <b>MSysComplexColumns<\/b> interessiert. Diese sieht aktuell wie in Bild 9 aus und enth&auml;lt, was wir suchen: einen Hinweis darauf, dass Access im Hintergrund mehr als eine semikola-separierte Liste ausgew&auml;hlter Elemente speichert.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Diese Tabelle enth&auml;lt Informationen &uuml;ber die Speicherung des Inhalts mehrwertiger Felder.<\/span><\/b><\/p>\n<p>In dieser Tabelle taucht der Name unseres Feldes auf, eine <b>ComplexID<\/b>, die m&ouml;glicherweise als eindeutiger Index der mehrwertigen Felder dient, und eine <b>ComplexTypeObjectID<\/b>. Interessant sind die beiden Eintr&auml;ge <b>ConceptualTableID <\/b>und <b>FlatTableID<\/b>: Diese enthalten Eintr&auml;ge, die wir in einer anderen Systemtabelle, n&auml;mlich <b>MSysObjects<\/b>, wiederfinden. Nach dem Ausblenden einiger Spalten und dem Filtern nach den Werten <b>70 <\/b>und <b>138 <\/b>im Feld <b>Id <\/b>liefert die Tabelle das Bild aus Bild 10. Auf die Tabelle aus der zweiten Zeile k&ouml;nnen wir leider nicht zugreifen &#8211; Access meldet, dieses Objekt sei nicht vorhanden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Die zweite Tabelle enth&auml;lt die Daten des mehrwertigen Feldes der ersten Tabelle.<\/span><\/b><\/p>\n<p><!--30percent--><\/p>\n<p><b>Wertliste erben<\/b><\/p>\n<p>Eine Eigenschaft von Kombinations- und Listenfeldern hei&szlig;t <b>Wertliste erben<\/b>. Diese Eigenschaft legt schlicht und einfach fest, ob &auml;nderungen an der Wertliste &uuml;ber Kombinations- und Listenfelder an die Wertliste der zugrunde liegenden Tabelle weitergegeben werden. Wenn ein Feld also in mehr als einem Formular vorkommt und Sie dem Benutzer &auml;nderungen am Inhalt der Wertliste erlauben (was Sie aus den weiter oben erl&auml;uterten Gr&uuml;nden aber gar nicht tun sollten), dann sollten Sie die Eigenschaft <b>Wertliste erben <\/b>auf <b>Ja <\/b>einstellen, damit die &uuml;brigen Formulare auch etwas davon haben.<\/p>\n<p>Genau genommen verh&auml;lt es sich so: Wenn <b>Wertliste erben <\/b>auf <b>Ja <\/b>eingestellt ist, werden sowohl &auml;nderungen an der Wertliste des Nachschlagefeldes im Formular an die zugrunde liegende Tabelle weitergegeben als auch umgekehrt. Wenn die Eigenschaft den Wert <b>Nein <\/b>aufweist, dann erf&auml;hrt die Tabelle nichts von neuen Listenwerten im Formular und umgekehrt.<\/p>\n<p>Im Hintergrund sieht es so aus, dass Access beim Anlegen eines Kombinationsfeldes auf Basis eines Nachschlagefeldes aus einer Tabelle mit Wertliste die zum Zeitpunkt des Hinzuf&uuml;gens vorliegende Wertliste in die entsprechende Eigenschaft eintr&auml;gt. Wenn <b>Wertliste erben <\/b>den Wert <b>Ja <\/b>aufweist, liest Access aber den aktuellen Inhalt der Wertliste aus der Tabelle aus und schreibt diesen in die entsprechende Eigenschaft des Kombinationsfeldes.<\/p>\n<p><b>Formular nach Wertlisten&auml;nderung schlie&szlig;en<\/b><\/p>\n<p>Da Sie mit der &auml;nderung der Wertliste auch den Entwurf des Formulars &auml;ndern, liefert das Schlie&szlig;en des Formulars die R&uuml;ckfrage, ob die &auml;nderungen am Entwurf des Formulars gespeichert werden sollen &#8211; aber nur, wenn die Eigenschaft <b>Wertliste erben <\/b>den Wert <b>Nein <\/b>aufweist! Denn nur dann wird die Wertliste tats&auml;chlich im Entwurf des Formulars ge&auml;ndert. Hat <b>Wertliste erben <\/b>den Wert <b>Ja<\/b>, dann bezieht sich die &auml;nderung der Wertliste auf die zugrunde liegende Tabelle, welche Access stillschweigend speichert.<\/p>\n<p>Damit der Benutzer sich nicht &uuml;ber eine solche Meldung wundern muss, sollten Sie eine Schlie&szlig;en-Schaltfl&auml;che vorsehen, welche das Formular &#8222;leise&#8220; speichert, also ohne Meldung. Die Schaltfl&auml;che versehen Sie einfach mit folgender Anweisung:<\/p>\n<pre>Private Sub cmdOK_Click()\r\n    DoCmd.Close acForm, Me.Name, acSaveYes\r\n    End Sub<\/pre>\n<p><b>Bearbeitungsformular f&uuml;r Listenelemente<\/b><\/p>\n<p>Diese Eigenschaft ist nur f&uuml;r den Einsatz mit einer Tabelle oder Abfrage als Datensatzherkunft vorgesehen. Sie k&ouml;nnen damit eines der vorhandenen Formulare ausw&auml;hlen, wobei dieses f&uuml;r die Bearbeitung der im jeweiligen Nachschlagefeld angegebenen Datenherkunft vorgesehen sein sollte. Wenn Sie also ein einfaches Formular auf Basis der Tabelle <b>tblTitel <\/b>der Beispieldatenbank erstellen und dieses <b>frmTitel <\/b>nennen, k&ouml;nnen Sie dieses f&uuml;r die Eigenschaft <b>Bearbeitungsformular f&uuml;r Listenelemente <\/b>in die entsprechende Eigenschaft des Nachschlagefelds im Tabellenentwurf eintragen. Ein Klick auf das beim Aufklappen des Nachschlagefeldes erscheinende Bearbeiten-Symbol &ouml;ffnet dann das angegebene Formular, in dem Sie die vorhandenen Eintr&auml;ge bearbeiten und\/oder erg&auml;nzen k&ouml;nnen.<\/p>\n<p><b>Unvollst&auml;ndiges Feature<\/b><\/p>\n<p>Diese Funktion ist im ersten Ansatz lobenswert, jedoch fehlen entscheidende Elemente. So w&auml;re es zum Beispiel wichtig, wenn das aufgerufene Formular irgendwie mitgeteilt bek&auml;me, welchen Wert das Nachschlagefeld zum Zeitpunkt des Aufrufs besitzt &#8211; man k&ouml;nnte dann Code im aufgerufenen Formular unterbringen, der gleich den Datensatzmarkierer auf den aktuell ausgew&auml;hlten Eintrag setzt.<\/p>\n<p>Andererseits scheint zumindest etwas in der Richtung geplant zu sein: Bei unseren Versuchen brachte die Eigenschaft <b>OpenArgs <\/b>des aufgerufenen Formulars jedenfalls den folgenden Ausdruck zu Tage (hier f&uuml;r den Aufruf des Formulars von der Tabelle aus):<\/p>\n<pre>[tblMitarbeiter]![Titel]=<\/pre>\n<p>Von einem Formular aus sah der Ausdruck etwas anders aus:<\/p>\n<pre>[frmMitarbeiter]![Titel]=<\/pre>\n<p>H&auml;tte Microsoft hier den Wert der gebundenen Spalte des Nachschlagefelds mitgeliefert, w&auml;re dies ein richtig praktisches Feature geworden. Mit ein wenig Geschick l&auml;sst sich dennoch die notwendige Erweiterung einbauen, um das Feature interessant zu gestalten. Dazu brauchen Sie im aufgerufenen Formular (in der Beispieldatenbank <b>frmTitel<\/b>) zwei Variablen, welche das aufrufende Formular und das aktive Steuerelement referenzieren sollen:<\/p>\n<pre>Dim frm As Form\r\nDim ctl As Control<\/pre>\n<p>Dann legen Sie ein Ereignis an, das durch die Ereigniseigenschaft <b>Beim &Ouml;ffnen <\/b>des Formulars <b>frmTitel <\/b>ausgel&ouml;st wird. Zu diesem Zeitpunkt sind das aufrufende Formular und das aufrufende Steuerelement die aktiven Elemente der Benutzeroberfl&auml;che. Sie k&ouml;nnen diese daher &uuml;ber die Funktionen <b>ActiveForm <\/b>und <b>ActiveControl <\/b>des <b>Screen<\/b>-Objekts ermitteln und speichern einen Verweis auf beide in den zuvor angelegten Variablen. Au&szlig;erdem sorgen Sie mit einer weiteren Anweisung daf&uuml;r, dass der aktuell im aufrufenden Steuerelement ausgew&auml;hlte Datensatz im Formular <b>frmTitel <\/b>markiert wird:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    Set frm = Screen.ActiveForm\r\n    Set ctl = Screen.ActiveControl\r\n    Me.Recordset.FindFirst &quot;TitelID = &quot; _\r\n    &amp; ctl.Value\r\n    RunCommand acCmdSelectRecord\r\n    End Sub<\/pre>\n<p>Schlie&szlig;lich soll der zuletzt bearbeitete Datensatz im aufrufenden Nachschlagefeld ausgew&auml;hlt werden. Die entsprechende Routine wird durch das Ereignis <b>Beim Entladen <\/b>ausgel&ouml;st. Sie pr&uuml;ft, ob das Prim&auml;rschl&uuml;sselfeld der hier bearbeiteten Tabelle und gleichzeitig das gebundene Feld des Nachschlagefelds einen Wert enth&auml;lt (das ist zum Beispiel nicht der Fall, wenn der Datensatzzeiger auf einem neuen Datensatz steht), und stellt das aufrufende Nachschlagefeld auf den entsprechenden Datensatz ein:<\/p>\n<pre>Private Sub Form_Unload(Cancel As Integer)\r\n    If Not IsNull(Me!TitelID) Then\r\n        ctl.Value = Me!TitelID\r\n    End If\r\n    End Sub<\/pre>\n<p>Bild 11 zeigt, wie dies in der Beispieldatenbank aussieht. Alternativ kann man nat&uuml;rlich auch noch Schaltfl&auml;chen wie <b>Auswahl &uuml;bernehmen<\/b> oder <b>Abbrechen <\/b>verwenden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Beim Aufrufen des Bearbeitungsformulars wird direkt der aktuelle Datensatz markiert.<\/span><\/b><\/p>\n<p><b>Mehrwertige Felder unter VBA<\/b><\/p>\n<p>Nat&uuml;rlich k&ouml;nnen Sie auch per VBA auf mehrwertige Felder zugreifen. Der prim&auml;re Reiz, dies zu tun, ist wohl die &Uuml;berf&uuml;hrung der in einer nicht n&auml;her definierbaren Tabelle enthaltenen Daten in das ordnungsgem&auml;&szlig;e Konstrukt einer m:n-Beziehung. Erst einmal untersuchen wir, was DAO f&uuml;r grunds&auml;tzliche Informationen &uuml;ber ein mehrwertiges Feld liefert. Die folgende Routine zeichnet die Struktur sehr gut nach. Dazu deklariert sie zun&auml;chst ein <b>Recordset<\/b>-Objekt auf Basis der Tabelle <b>tblMitarbeiter<\/b>. Anschlie&szlig;end erzeugt sie ein zweites Recordset, das auf die <b>Value<\/b>-Eigenschaft des mehrwertigen Feldes <b>Funktionen <\/b>verweist. Die anschlie&szlig;ende <b>For Each<\/b>-Schleife durchl&auml;uft alle Felder dieses Recordsets, was nicht besonders viele sind: Es gibt n&auml;mlich nur ein einziges Feld namens <b>Value <\/b>mit dem Wert <b>10 <\/b>f&uuml;r die Eigenschaft <b>Type<\/b>, was der Konstanten <b>dbText <\/b>entspricht und auf ein Textfeld hindeutet:<\/p>\n<pre>Public Sub MWFFelder()\r\nDim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nDim rstMWF As DAO.Recordset2\r\nDim fld As DAO.Field2\r\nSet db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT * FROM\r\ntblMitarbeiter&quot;, dbOpenDynaset)\r\nSet rstMWF = rst!Funktionen.Value\r\nFor Each fld In rstMWF.Fields\r\n Debug.Print fld.Name, fld.Type\r\nNext fld\r\nSet db = Nothing\r\nEnd Sub<\/pre>\n<p>Hinweis: <b>Recordset2<\/b> und <b>Field2 <\/b>sind zwei neue Objekte der <b>Bibliothek Microsoft Office 12.0 Access Database Engine Object Library<\/b>, die speziell f&uuml;r den Einsatz mit mehrwertigen Feldern ausgelegt sind. Sie k&ouml;nnen auch die alten Objekte verwenden, Access setzt dann offensichtlich automatisch die neuere Variante ein.<\/p>\n<p>Schauen wir uns eine weitere Prozedur an, die diesmal den Inhalt der Tabelle <b>tblMitarbeiter <\/b>und die im Feld <b>Funktionen <\/b>enthaltenen Informationen durchl&auml;uft und deren Ausgabe beispielsweise wie in Bild 12 aussieht:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Ausgabe der Prozedur MWFAuslesen<\/span><\/b><\/p>\n<pre>Public Sub MWFAuslesen()\r\nDim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nDim fld As DAO.Field2\r\nDim rstMWF As DAO.Recordset2\r\nSet db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT * FROM\r\ntblMitarbeiter&quot;, dbOpenDynaset)\r\nDo While Not rst.EOF\r\nDebug.Print &quot;Mitarbeiter: &quot; _\r\n&amp; rst!Vorname &amp; &quot; &quot; &amp; rst!Nachname\r\nSet rstMWF = rst!Funktionen.Value\r\nDebug.Print &quot; Funktionen:&quot;\r\nDo While Not rstMWF.EOF\r\n Debug.Print &quot; &quot; &amp; rstMWF.Fields(0)\r\n    rstMWF.MoveNext\r\nLoop\r\nrst.MoveNext\r\nLoop\r\nEnd Sub<\/pre>\n<p>Sie sehen: Wir k&ouml;nnen die Datens&auml;tze eines mehrwertigen Feldes genau durchlaufen wie die einer verkn&uuml;pften Tabelle. Wenn es rein darum geht, die in allen Datens&auml;tzen enthaltenen Werte des Feldes <b>Funktionen <\/b>zu ermitteln, k&ouml;nnen Sie auch die folgende Prozedur anwenden. Sie verwendet eine entsprechende SQL-Abfrage, um direkt auf das Feld <b>Value <\/b>der im Feld <b>Funktionen <\/b>hinterlegten Tabelle zuzugreifen:<\/p>\n<pre>Public Sub MWFWerteAuslesen()\r\nDim db As DAO.Database\r\nDim rst As DAO.Recordset\r\nSet db = CurrentDb\r\nSet rst = db.OpenRecordset(&quot;SELECT\r\nFunktionen.Value FROM tblMitarbeiter&quot;,\r\ndbOpenDynaset)\r\nDo While Not rst.EOF\r\nDebug.Print rst(&quot;Funktionen.Value&quot;)\r\nrst.MoveNext\r\nLoop\r\nSet db = Nothing\r\nEnd Sub<\/pre>\n<p>Der Nachteil hierbei ist, dass Werte, die mehreren Mitarbeitern zugewiesen sind, auch mehrmals ausgegeben werden und dass Werte, die keinem Mitarbeiter zugeordnet wurden, gar nicht in der Liste erscheinen. Zumindest das erste Problem l&auml;sst sich leicht beheben. Dazu erweitern Sie die verwendete SQL-Abfrage einfach durch das Schl&uuml;sselwort <b>DISTINCT<\/b>:<\/p>\n<pre>SELECT DISTINCT Funktionen.Value\r\nFROM tblMitarbeiter<\/pre>\n<p>Wenn Sie auch alle &uuml;berhaupt vorhandenen Elemente der hinter dem mehrwertigen Feld steckenden Wertliste ermitteln m&ouml;chten, verwenden Sie eine Prozedur &auml;hnlich der folgenden:<\/p>\n<pre>Public Sub MWFAlleWerte()\r\nDim db As DAO.Database\r\nDim tdf As DAO.TableDef\r\nDim fld As DAO.Field\r\nDim strValues() As String\r\nDim i As Integer\r\nSet db = CurrentDb\r\nSet tdf = db.TableDefs(&quot;tblMitarbeiter&quot;)\r\nSet fld = tdf.Fields(&quot;Funktionen&quot;)\r\nstrValues = _\r\nSplit(fld.Properties(&quot;RowSource&quot;), &quot;;&quot;)\r\nFor i = LBound(strValues) To\r\nUBound(strValues)\r\nDebug.Print Replace(strValues(i),\r\nChr(34), &quot;&quot;)\r\nNext i\r\nSet fld = Nothing\r\nSet tdf = Nothing\r\nSet db = Nothing\r\nEnd Sub<\/pre>\n<p>Die Liste aller Eintr&auml;ge wird n&auml;mlich (wahrscheinlich unter anderem) in der Eigenschaft <b>Datensatzherkunft <\/b>des Nachschlagefeldes gespeichert, die sich per VBA &uuml;ber die <b>RowSource<\/b>-Eigenschaft des <b>Field<\/b>-Objekts auslesen l&auml;sst.<\/p>\n<p><b>Der mehrwertige Bug<\/b><\/p>\n<p>Dass die Technik der mehrwertigen Felder zumindest unter Access 2007 noch nicht ausgereift ist, zeigt sich an folgendem Beispiel:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Legen Sie eine Tabelle mit einem Prim&auml;rschl&uuml;sselfeld (<b>ID<\/b>) und einem mehrwertigen Nachschlagefeld (<b>MWF<\/b>) an.<\/li>\n<li class=\"aufz-hlung\">Tragen Sie vier Eintr&auml;ge in das mehrwertige Feld ein (<b>Wert1<\/b>, <b>Wert2<\/b>, <b>Wert3<\/b>, <b>Wert4<\/b>).<\/li>\n<li class=\"aufz-hlung\">Legen Sie zwei Datens&auml;tze an, von denen der erste die ersten drei Eintr&auml;ge des mehrwertigen Felds enth&auml;lt und der zweite die letzten drei.<\/li>\n<li class=\"aufz-hlung\">Bearbeiten Sie dann die Liste und l&ouml;schen Sie den letzten Eintrag.<\/li>\n<li class=\"aufz-hlung\">Schauen Sie sich die in den mehrwertigen Feldern der beiden Datens&auml;tze enthaltenen Daten durch Aufklappen des Nachschlagefelds an.<\/li>\n<\/ul>\n<p>Der erste Datensatz zeigt richtigerweise die zuvor ausgew&auml;hlten Eintr&auml;ge an und l&auml;sst den gel&ouml;schten vierten Eintrag weg. Beim zweiten Datensatz jedoch ist der vierte Eintrag noch vorhanden, wie Bild 13 zeigt. Diese Inkonsistenz macht mehrwertige Felder quasi unbrauchbar &#8211; Grund genug, die enthaltenen Daten schnellstm&ouml;glich in eine richtige m:n-Beziehung zu &uuml;berf&uuml;hren.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_02\/MehrwertigeFelder-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: Mehrwertige Felder l&ouml;schen verkn&uuml;pfte Daten nicht, obwohl diese aus der Menge der zur Auswahl stehenden Daten entfernt wurden.<\/span><\/b><\/p>\n<p><b>Vom mehrwertigen Feld zur m:n-Beziehung<\/b><\/p>\n<p>Somit haben wir alles Handwerkszeug parat, um das mehrwertige Feld in eine handels&uuml;bliche m:n-Beziehung zu &uuml;berf&uuml;hren. Die Prozedur aus Listing 1 erzeugt zun&auml;chst die beiden Tabellen <b>tblFunktionen <\/b>und <b>tblMitarbeiterFunktionen <\/b>als Verkn&uuml;pfungstabelle. Dabei legt sie f&uuml;r das Feld <b>Funktion <\/b>der Tabelle <b>tblFunktionen <\/b>einen eindeutigen Index an, um Redundanzen zu vermeiden. Auch die Beziehungen zwischen <b>tblMitarbeiterFunktionen <\/b>und den beiden Tabellen <b>tblMitarbeiter <\/b>und <b>tblFunktionen <\/b>stellt die Prozedur her. Zuvor werden eventuell bereits existierende Tabellen gleichen Namens gel&ouml;scht, damit die Tabellen neu erstellt werden k&ouml;nnen.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: &Uuml;berf&uuml;hren von mehrwertigen Feldern in eine m:n-Beziehung<\/p>\n<pre>Public Sub VonMWFZuMN()\r\nDim db As DAO.Database\r\nDim tdf As DAO.TableDef\r\nDim fld As DAO.Field2\r\nDim strValues() As String\r\nDim i As Integer\r\nDim rst As DAO.Recordset\r\nDim rstMWF As DAO.Recordset2\r\nDim lngFunktionID As Long\r\nSet db = CurrentDb\r\nOn Error Resume Next\r\ndb.Execute &quot;DROP TABLE tblMitarbeiterFunktionen&quot;, dbFailOnError\r\ndb.Execute &quot;DROP TABLE tblFunktionen&quot;, dbFailOnError\r\nOn Error GoTo 0\r\ndb.Execute &quot;CREATE TABLE tblFunktionen(FunktionID COUNTER CONSTRAINT PK PRIMARY KEY,\r\nFunktion TEXT(255) CONSTRAINT UK UNIQUE)&quot;, dbFailOnError\r\ndb.Execute &quot;CREATE TABLE tblMitarbeiterFunktionen(ID COUNTER CONSTRAINT PK PRIMARY KEY,\r\nMitarbeiterID INTEGER, FunktionID INTEGER, CONSTRAINT FKMitarbeiter FOREIGN\r\nKEY(MitarbeiterID) REFERENCES tblMitarbeiter, CONSTRAINT FKFunktionen FOREIGN\r\nKEY(FunktionID) REFERENCES tblFunktionen)&quot;, dbFailOnError\r\nSet tdf = db.TableDefs(&quot;tblMitarbeiter&quot;)\r\nSet fld = tdf.Fields(&quot;Funktionen&quot;)\r\nstrValues = Split(fld.Properties(&quot;RowSource&quot;), &quot;;&quot;)\r\nFor i = LBound(strValues) To UBound(strValues)\r\n db.Execute &quot;INSERT INTO tblFunktionen(Funktion) VALUES(''&quot; &amp; Replace(strValues(i),  \r\n    Chr(34), &quot;&quot;) &amp; &quot;'')&quot;, dbFailOnError\r\nNext i\r\nSet rst = db.OpenRecordset(&quot;SELECT * FROM tblMitarbeiter&quot;, dbOpenDynaset)\r\nDo While Not rst.EOF\r\n Set rstMWF = rst!Funktionen.Value\r\n    Do While Not rstMWF.EOF\r\n        On Error Resume Next\r\n        db.Execute &quot;INSERT INTO tblFunktionen(Funktion) VALUES(''&quot; &amp; rstMWF!Value &amp; &quot;'')&quot;,\r\n        dbFailOnError\r\n        On Error GoTo 0\r\n        lngFunktionID = DLookup(&quot;FunktionID&quot;, &quot;tblFunktionen&quot;, &quot;Funktion = ''&quot; &amp; rstMWF!Value &amp; &quot;''&quot;)\r\n        db.Execute &quot;INSERT INTO tblMitarbeiterFunktionen(MitarbeiterID, FunktionID) VALUES(&quot;\r\n        &amp; rst!MitarbeiterID &amp; &quot;, &quot; &amp; lngFunktionID &amp; &quot;)&quot;, dbFailOnError\r\n        rstMWF.MoveNext\r\n    Loop\r\n    rst.MoveNext\r\nLoop\r\nSet db = Nothing\r\nEnd Sub<\/pre>\n<p>Danach kommt eine modifizierte Version der Prozedur <b>MWFAlleWerte <\/b>zum Einsatz. Diese liest alle in der Eigenschaft <b>Datensatzherkunft <\/b>des mehrwertigen Feldes enthaltenen Werte ein und schreibt diese in die Tabelle <b>tblFunktionen<\/b>. Dabei behalten wir im Hinterkopf, dass diese Eigenschaft unter Umst&auml;nden nicht mehr alle sp&auml;ter ben&ouml;tigten Elemente enth&auml;lt &#8211; andererseits kann sie aber Eintr&auml;ge liefern, die noch nicht in Verwendung sind und daher bei der nun folgenden Analyse der Feldinhalte des Feldes <b>Funktionen <\/b>der Tabelle <b>tblMitarbeiter <\/b>nicht gefunden werden.<\/p>\n<p>Dabei durchlaufen zwei Schleifen alle Datens&auml;tze der Tabelle <b>tblMitarbeiter <\/b>und der im Feld <b>Funktionen <\/b>enthaltenen Tabelle und schreiben dabei zun&auml;chst alle Funktionen in <b>tblFunktionen<\/b>, um direkt im Anschluss die Verkn&uuml;pfungstabelle <b>tblMitarbeiterFunktionen <\/b>mit den entsprechenden Daten zu versehen. Somit ergibt sich ein sauberes Datenmodell, das keine Gefahr von Inkonsistenzen hervorrufen wird. F&uuml;r eigene Zwecke passen Sie einfach die Tabellen- und Feldnamen an oder parametrisieren die Prozedur gleich, wenn Sie diese mehrfach einsetzen m&ouml;chten.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>MehrwertigeFelder.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{167C3992-8538-4DD9-AA96-F5A3185C8AAB}\/aiu_706.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access 2007 bringt einige Features, welche die Entwicklergemeinde spalten. Eines davon sind die mehrwertigen Felder, auch Multivalue Fields genannt: Sie erlauben dem Einsteiger, leicht mehrere Werte zu einem Nachschlagefeld einer Tabelle hinzuzuf&uuml;gen. Wir werfen einen genauen Blick auf dieses Feature, was auch f&uuml;r Gegner dieser Technik interessant sein d&uuml;rfte: Immerhin ist keiner davor gefeit, eine mit mehrwertigen Feldern gespickte Datenbank in eine mit sauberer Datenmodellierung zu &uuml;berf&uuml;hren &#8211; hier erfahren Sie deshalb auch, wie Sie an die Daten aus solchen Feldern herankommen.<\/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":[66022010,662010,44000021],"tags":[],"class_list":["post-55000706","post","type-post","status-publish","format-standard","hentry","category-66022010","category-662010","category-Tabellen_und_Datenmodellierung"],"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>Nachschlage- und mehrwertige Felder - 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\/Nachschlage_und_mehrwertige_Felder\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nachschlage- und mehrwertige Felder\" \/>\n<meta property=\"og:description\" content=\"Access 2007 bringt einige Features, welche die Entwicklergemeinde spalten. Eines davon sind die mehrwertigen Felder, auch Multivalue Fields genannt: Sie erlauben dem Einsteiger, leicht mehrere Werte zu einem Nachschlagefeld einer Tabelle hinzuzuf&uuml;gen. Wir werfen einen genauen Blick auf dieses Feature, was auch f&uuml;r Gegner dieser Technik interessant sein d&uuml;rfte: Immerhin ist keiner davor gefeit, eine mit mehrwertigen Feldern gespickte Datenbank in eine mit sauberer Datenmodellierung zu &uuml;berf&uuml;hren - hier erfahren Sie deshalb auch, wie Sie an die Daten aus solchen Feldern herankommen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:11:12+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2\" \/>\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=\"18\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Nachschlage- und mehrwertige Felder\",\"datePublished\":\"2020-05-22T22:11:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/\"},\"wordCount\":3050,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/df460212e2f24392b6f0a4b5cf79e6a2\",\"articleSection\":[\"2\\\/2010\",\"2010\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/\",\"name\":\"Nachschlage- und mehrwertige Felder - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/df460212e2f24392b6f0a4b5cf79e6a2\",\"datePublished\":\"2020-05-22T22:11:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/df460212e2f24392b6f0a4b5cf79e6a2\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/df460212e2f24392b6f0a4b5cf79e6a2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Nachschlage_und_mehrwertige_Felder\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nachschlage- und mehrwertige Felder\"}]},{\"@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":"Nachschlage- und mehrwertige Felder - 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\/Nachschlage_und_mehrwertige_Felder\/","og_locale":"de_DE","og_type":"article","og_title":"Nachschlage- und mehrwertige Felder","og_description":"Access 2007 bringt einige Features, welche die Entwicklergemeinde spalten. Eines davon sind die mehrwertigen Felder, auch Multivalue Fields genannt: Sie erlauben dem Einsteiger, leicht mehrere Werte zu einem Nachschlagefeld einer Tabelle hinzuzuf&uuml;gen. Wir werfen einen genauen Blick auf dieses Feature, was auch f&uuml;r Gegner dieser Technik interessant sein d&uuml;rfte: Immerhin ist keiner davor gefeit, eine mit mehrwertigen Feldern gespickte Datenbank in eine mit sauberer Datenmodellierung zu &uuml;berf&uuml;hren - hier erfahren Sie deshalb auch, wie Sie an die Daten aus solchen Feldern herankommen.","og_url":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:11:12+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"18\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Nachschlage- und mehrwertige Felder","datePublished":"2020-05-22T22:11:12+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/"},"wordCount":3050,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2","articleSection":["2\/2010","2010","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/","url":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/","name":"Nachschlage- und mehrwertige Felder - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2","datePublished":"2020-05-22T22:11:12+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/df460212e2f24392b6f0a4b5cf79e6a2"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Nachschlage_und_mehrwertige_Felder\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Nachschlage- und mehrwertige Felder"}]},{"@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\/55000706","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=55000706"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000706\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}