{"id":55000665,"date":"2009-06-01T00:00:00","date_gmt":"2020-05-22T22:23:16","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=665"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"LookupDaten_verwalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/","title":{"rendered":"Lookup-Daten verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Verkn&uuml;pfte Daten aus 1:n-Beziehungen stammen oft aus Tabellen, die nur ein Feld oder zumindest wenige Felder enthalten. Solche Daten zeigt man in Kombinationsfeldern an, die Bearbeitung erfolgt in der Regel in entsprechenden Formularen. Die Anzahl der Formulare steigt mit der Anzahl der Lookup-Tabellen und somit auch der Aufwand bei &auml;nderungen. Dieser Beitrag zeigt, wie Sie sich die Arbeit vereinfachen und eine Menge Formulare sparen.<\/b><\/p>\n<p>Beispiele f&uuml;r Tabellen mit Lookup-Daten sind solche, die Anreden oder Titel von Personen, Abteilung oder Position von Mitarbeitern oder auch Marke und Treibstoffart von Fahrzeugen speichern. Ihre Daten werden von den &uuml;bergeordneten Tabellen mit einem einfachen Fremdschl&uuml;sselfeld, gegebenenfalls direkt mit Nachschlagefeldfunktion verkn&uuml;pft.<\/p>\n<p><b>Warum Lookup-Tabellen<\/b><\/p>\n<p>Der Grund f&uuml;r die Verwendung von Lookup-Tabellen sind Felder, die sich oft wiederholende und somit redundante Daten enthalten, die in der Folge zu Inkonsistenzen f&uuml;hren k&ouml;nnen. Das einfachste Beispiel ist das Feld <b>Anrede<\/b>, das in allen irgendwie mit Personendaten gef&uuml;llten Tabellen vorkommt. Es enth&auml;lt normalerweise Daten wie Herr oder Frau. Mit diesem Feld lie&szlig;en sich die in der Tabelle gespeicherten Personen also leicht nach Geschlecht unterteilen, indem man alle Datens&auml;tze ausgibt, die dort entweder den Wert <b>Herr <\/b>oder <b>Frau <\/b>aufweisen. Wenn aber nun einem Benutzer der Datenbank ein Tippfehler unterl&auml;uft, funktioniert dies nicht mehr: Lautet der Inhalt des Feldes <b>Anrede <\/b>f&uuml;r einen Datensatz <b>Herrn <\/b>statt <b>Herr<\/b>, wird dieses Feld bei einer Suche nach allen m&auml;nnlichen Personen &uuml;bergangen.<\/p>\n<p>Also quartiert man die Inhalte solcher Felder in eigene Tabellen aus, die aus einem Prim&auml;rschl&uuml;ssel wie <b>ID <\/b>oder <b>AnredeID <\/b>und dem Feld mit den eigentlichen Werten bestehen, und f&uuml;gt der Tabelle mit den Personendaten ein Feld etwa namens <b>AnredeID <\/b>hinzu, das den im Prim&auml;rschl&uuml;sselfeld der neu geschaffenen Lookuptabelle gespeicherten Wert enth&auml;lt.<\/p>\n<p>Neben der Tatsache, dass nun nur noch die f&uuml;r dieses Feld bestimmten Werte verf&uuml;gbar sind, gibt es zwei weitere Vorteile:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Sie k&ouml;nnen ein Nachschlagefeld direkt in der Tabelle mit den Personendaten einrichten, das die Auswahl der verf&uuml;gbaren Anreden erlaubt, sodass Tippfehler ausgeschlossen sind.<\/li>\n<li class=\"aufz-hlung\">Sie sparen h&ouml;chstwahrscheinlich Speicherplatz. Zwar kostet die Lookuptabelle zun&auml;chst ein wenig Platz, aber da Sie in der Tabelle mit den Personendaten nur noch die ID der betroffenen Anrede aus der Tabelle <b>tblAnreden <\/b>speichern m&uuml;ssen, fallen hier nur noch zwei Byte pro Anrede (<b>Long Integer<\/b>) an, w&auml;hrend f&uuml;r Zeichenketten zwei Byte pro Zeichen anfallen, also allein f&uuml;r die Bezeichnung <b>Herr <\/b>oder <b>Frau <\/b>je acht Byte.<\/li>\n<\/ul>\n<p>Weitere Informationen zum Einsatz von Lookup-Tabellen finden Sie im Beitrag <b>Lookup-Daten in der Praxis <\/b>(Shortlink 211); wir steigen nun direkt in das Verwalten der in Lookup-Tabellen gespeicherten Daten ein.<\/p>\n<p><b>Lookup-Datenformular<\/b><\/p>\n<p>Die Daten mancher Lookup-Tabellen, wie etwa Anreden, brauchen nie ge&auml;ndert zu werden, daher sieht man auch kein Formular vor, das diese anzeigt und zur Bearbeitung anbietet. Ihre Daten erscheinen in den Kombinationsfeldern zur Auswahl in den Tabellen, die per Fremdschl&uuml;sselfeld mit ihnen verkn&uuml;pft sind.<\/p>\n<p>Andere Lookup-Daten sind da schon umtriebiger: Abteilungen und Positionen &auml;ndern sich gerade in Zeiten der Globalisierung &ouml;fter mal und da freut sich der Datenbankanwender, wenn er die neuen Elemente ohne den Gang zum Entwickler selbst neu einpflegen kann.<\/p>\n<p>Zu diesem Zweck verwendet man meist ein eigenes Formular f&uuml;r jede Lookuptabelle, die alle Eintr&auml;ge in Listenform, also entweder im Endlosformular oder in der Datenblattansicht, anzeigt und auch ihre Bearbeitung zul&auml;sst.<\/p>\n<p>Bei gr&ouml;&szlig;eren Datenbanken kommen so leicht einige Formulare zusammen. Das ist eigentlich kein Problem, aber wenn man irgendwann einmal das Design der Datenbank &auml;ndern m&ouml;chte, ist man doch um jedes Formular froh, das man dabei aussparen kann &#8211; und wenn Sie einmal eine Datenbank mit wirklich vielen Formularen, Berichten und Modulen erstellt haben, wissen Sie, dass irgendwann auch die &Uuml;bersicht im Datenbankfenster, beziehungsweise im Navigationsbereich, verlorengeht.<\/p>\n<p>Es gibt sogar Datenbanken, die sich wegen der Menge der enthaltenen Objekte nicht mehr kompilieren lassen &#8211; hier w&uuml;rde die in diesem Beitrag vorgestellte L&ouml;sung f&uuml;r etwas Luft sorgen.<\/p>\n<p>Generell kann es kaum schaden, wenn man Elemente einer Datenbank, die sich nur durch wenige Eigenschaften unterscheiden, zusammenfasst und parametrisiert, um sie je nach Anwendungsfall auszugestalten.<\/p>\n<p>Die Formulare zur Bearbeitung von Lookup-Daten unterscheiden sich dann auch nur durch die folgenden Eigenschaften:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Lookuptabelle als Datenherkunft des Formulars<\/li>\n<li class=\"aufz-hlung\">Beschriftungen der Bezeichnungsfelder<\/li>\n<li class=\"aufz-hlung\">Steuerelementinhalte der Datenfelder<\/li>\n<li class=\"aufz-hlung\">gegebenenfalls Anzahl der Datenfelder<\/li>\n<\/ul>\n<p>Die Gemeinsamkeit der Lookup-Tabellen besteht in der geringen Anzahl von Feldern. Im besten Fall bestehen diese nur aus dem Prim&auml;rschl&uuml;sselfeld und dem Feld mit der relevanten Information, also beispielsweise Anrede, Position oder Abteilung; die in diesem Beitrag vorgestellte L&ouml;sung erlaubt aber auch die Bearbeitung von Tabellen mit maximal drei Datenfeldern (es ist beispielsweise denkbar, dass eine Anreden-Tabelle auch gleich noch die Briefanrede wie <b>Sehr geehrter Herr <\/b>mitspeichert).<\/p>\n<p>Bei Tabellen mit mehr Informationen sollte man davon ausgehen, dass es sich nicht mehr um eine Lookuptabelle im eigentlichen Sinne handelt und ein eigenes Formular zur Detailansicht eines einzelnen Datensatzes einplanen.<\/p>\n<p><b>Lookup-Daten schnell bearbeiten<\/b><\/p>\n<p>Die hier vorgestellte L&ouml;sung soll folgende M&ouml;glichkeiten bieten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">&Ouml;ffnen des Formulars zum Bearbeiten der Lookup-Daten per Doppelklick auf das Kombinationsfeld mit dem Lookup-Feld oder per Klick auf eine rechts daneben befindliche Schaltfl&auml;che<\/li>\n<li class=\"aufz-hlung\">Hinzuf&uuml;gen, bearbeiten und l&ouml;schen der Lookup-Daten im dann erscheinenden Formular<\/li>\n<li class=\"aufz-hlung\">&Uuml;bernehmen des aktuell im Lookup-Formular ausgew&auml;hlten Datensatzes per Klick auf <b>OK <\/b>oder Doppelklick auf den aktuellen Eintrag in das aufrufende Kombinationsfeld<\/li>\n<li class=\"aufz-hlung\">Beibehalten des im Kombinationsfeld ausgew&auml;hlten Lookupwerts, wenn der Benutzer das Lookup-Formular mit Abbrechen verl&auml;sst oder der Datensatzzeiger im Formular auf einen leeren, neuen Datensatz zeigt<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Der Aufruf des Lookup-Formulars &uuml;ber das Kombinationsfeld eines anderen Formulars sollte wie in Bild 1 aussehen. <\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_03\/LookupdatenVerwalten-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Das Lookup-Formular mit den Daten des Kombinationsfelds<\/span><\/b><\/p>\n<p><b>Schnellstart<\/b><\/p>\n<p>Wenn Sie das Lookup-Formular sofort in Ihren Datenbanken einsetzen m&ouml;chten, brauchen Sie nur die folgenden Schritte durchzuf&uuml;hren:<\/p>\n<ul>\n<li class=\"aufz-hlung\">F&uuml;gen Sie die Formulare <b>frmListEditor <\/b>und <b>sfmListEditor <\/b>sowie das Modul <b>mdlListEditor <\/b>in die Zieldatenbank ein.<\/li>\n<li class=\"aufz-hlung\">Wenn Sie das Formular per Doppelklick auf das Kombinationsfeld mit den Lookup-Daten &ouml;ffnen m&ouml;chten, f&uuml;gen Sie der Prozedur, die durch das Ereignis <b>Beim Doppelklicken <\/b>des Kombinationsfeldes ausgel&ouml;st wird, die folgende Zeile hinzu:<\/li>\n<\/ul>\n<pre>DoCmd.OpenForm \"frmListEditor\", WindowMode:=acDialog, OpenArgs:=\"Anreden bearbeiten\"<\/pre>\n<ul>\n<li class=\"aufz-hlung\">Wenn Sie eine Schaltfl&auml;che neben dem Kombinationsfeld anlegen m&ouml;chten, um die Funktion etwas offensichtlicher anzubieten, f&uuml;gen Sie dem <b>Beim Klicken<\/b>-Ereignis diese beiden Zeilen hinzu:<\/li>\n<\/ul>\n<pre>Me.&lt;Kombinationsfeldname&gt;.SetFocus\r\nDoCmd.OpenForm \"frmListEditor\", WindowMode:=acDialog, OpenArgs:=\"&lt;Titel des Lookupformlars&gt;\"<\/pre>\n<p>Letzteres setzt zun&auml;chst den Fokus auf das betroffene Kombinationsfeld und &ouml;ffnet dann das Formular. Was dort im Einzelnen geschieht, erfahren Sie in den folgenden Abschnitten.<\/p>\n<p><b>Aufbau des Lookup-Formulars<\/b><\/p>\n<p>Das Lookup-Formular besteht aus einem Haupt- und einem Unterformular (<b>frmListEditor <\/b>und <b>sfmListEditor<\/b>) und ist wie in Bild 2 aufgebaut.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_03\/LookupdatenVerwalten-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Aufbau von Haupt- und Unterformular des Lookup-Formulars<\/span><\/b><\/p>\n<p>Das Hauptformular enth&auml;lt neben dem Unterformular lediglich die beiden Schaltfl&auml;chen <b>cmdClose <\/b>und <b>cmdCancel<\/b>. Das Unterformular besitzt je drei Bezeichnungs- und Textfelder, die auf den Formularkopf und den Detailbereich aufgeteilt sind. Die Bezeichnungsfelder werden dynamisch mit Beschriftungen versehen, daher ist ihr Name in diesem Fall wichtig &#8211; sie hei&szlig;en <b>lbl1<\/b>, <b>lbl2 <\/b>und <b>lbl3<\/b>. Textfelder sollten immer einen aussagekr&auml;ftigen Namen haben, in diesem Fall sollen diese jedoch ausnahmsweise nur praktisch sein: Das bedeutet, dass sie in einer Schleife durchlaufen werden sollen und dazu w&auml;hlen Sie einfach die Namen <b>txt1<\/b>, <b>txt2 <\/b>und <b>txt3<\/b>. Wie die Schleife die Steuerelemente durchl&auml;uft, erfahren Sie weiter unten.<\/p>\n<p><b>Beim Laden konfektionieren<\/b><\/p>\n<p>Der Clou des Lookup-Formulars ist, dass es je nach der Datenherkunft des Kombinationsfelds ein, zwei oder drei Felder anzeigen soll. Die angezeigten Felder sollen zusammen die gesamte Breite des Unterformulars einnehmen, wodurch diese in der <b>Beim &Ouml;ffnen<\/b>-Ereignisprozedur des Hauptformulars entsprechend eingestellt werden.<\/p>\n<p>Bevor wir uns diese Routine (s. Listing 1) genauer ansehen, werfen wir noch einen Blick darauf, wie das Formular ge&ouml;ffnet werden muss. Dies geschieht am einfachsten &uuml;ber einen Doppelklick auf das Kombinationsfeld, dessen Daten es anzeigen soll. Im Falle des Kombinationsfelds <b>cboAnredeID <\/b>aus dem Formular <b>frmKunden <\/b>der Beispieldatenbank sieht die dadurch ausgel&ouml;ste Ereignisprozedur so aus:<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Aktivierung der Eingabefelder<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    Dim strOpenArgs As String\r\n    Dim lngFields As Long\r\n    Dim i As Integer\r\n    On Error GoTo Fehler\r\n    strOpenArgs = Nz(Me.OpenArgs) [1]\r\n    If Len(strOpenArgs) &gt; 0 Then\r\n        Me.Caption = strOpenArgs\r\n    End If\r\n    On Error Resume Next\r\n    Set ctl = Screen.ActiveControl [2]\r\n    If ctl Is Nothing Then\r\n        Cancel = True\r\n        Exit Sub\r\n    End If\r\n    On Error GoTo Fehler\r\n    With Me!sfmListEditor\r\n        .Form.RecordSource = ctl.RowSource [3]\r\n        lngFields = .Form.Recordset.Fields.count\r\n        For i = 1 To lngFields - 1 [4]\r\n            .Controls(\"txt\" &amp; i).Visible = True\r\n            .Controls(\"txt\" &amp; i).Width = 6400 \/ (lngFields - 1)\r\n            .Controls(\"txt\" &amp; i).Left = (i - 1) * (!txt1.Width)\r\n            .Controls(\"txt\" &amp; i).ControlSource = .Form.Recordset.Fields(i).Name\r\n            .Controls(\"lbl\" &amp; i).Visible = True\r\n            .Controls(\"lbl\" &amp; i).Width = 6400 \/ (lngFields - 1)\r\n            .Controls(\"lbl\" &amp; i).Left = (i - 1) * (!txt1.Width)\r\n            On Error Resume Next\r\n            .Controls(\"lbl\" &amp; i).Caption = .Form.Recordset.Fields(i).Properties(\"Description\")\r\n            If Err.Number &lt;&gt; 0 Then\r\n                .Controls(\"lbl\" &amp; i).Caption = .Form.Recordset.Fields(i).Name\r\n            End If\r\n            On Error GoTo 0\r\n        Next i\r\n        .SetFocus [5]\r\n        .Form.Recordset.FindFirst .Form.Recordset.Fields(0).Name &amp; \"=\" &amp; Nz(ctl.Value, 0)\r\n        If .Form.Recordset.NoMatch Then DoCmd.GoToRecord , , acNewRec\r\n    End With\r\nEnde:\r\n    Exit Sub\r\nFehler:\r\n    ErrNotify Err, \"Form_frmListEditor\", \"Form_Open\"\r\n    Resume Ende\r\nEnd Sub\r\nPrivate Sub cboAnredeID_DblClick(Cancel As Integer)\r\n    DoCmd.OpenForm \"frmListEditor\", WindowMode:=acDialog, OpenArgs:=\"Anreden bearbeiten\"\r\nEnd Sub<\/pre>\n<p>Das Formular <b>frmListEditor <\/b>wird dort als modaler Dialog ge&ouml;ffnet und erh&auml;lt mit dem &Ouml;ffnungsargument den im Titel des Lookup-Formulars anzuzeigenden Text. Woher aber wei&szlig; das Formular, um welches Kombinationsfeld es sich dreht und welche Daten es anzeigen soll Diese Fragen beantwortet die Ereignisprozedur <b>Form_Open <\/b>aus Listing 1.<\/p>\n<p>Nach dem &Ouml;ffnen schreibt die Routine zun&auml;chst den Wert von <b>Me.OpenArgs<\/b>, also den beim Aufrufen &uuml;bergebenen Text, in die Variable <b>strOpenArgs<\/b> [1]. Ist die Zeichenkette nicht leer, wird diese direkt der Eigenschaft <b>Caption <\/b>des Formulars zugewiesen (anderenfalls wird dort wie &uuml;blich der Formularname angezeigt).<\/p>\n<p>Dann kommt der magische Moment [2]: Mit der <b>Screen.ActiveControl<\/b>-Funktion ermittelt die Routine einen Verweis auf das aktuelle Steuerelement, was zu diesem Zeitpunkt noch das Kombinationsfeld ist, und weist diesen der Variablen <b>ctl <\/b>zu, die den Typ <b>ComboBox <\/b>hat und wie folgt im Kopf des Klassenmoduls des Formulars deklariert wird:<\/p>\n<pre>Private ctl As Access.ComboBox<\/pre>\n<p>Misslingt dies, wird der &Ouml;ffnen-Vorgang abgebrochen. Die folgenden Anweisungen beziehen sich alle auf das Unterformular <b>sfmListEditor<\/b>. Dort wird zun&auml;chst der Datenherkunft des Formulars die Datensatzherkunft des &uuml;ber <b>ctl <\/b>referenzierten Kombinationsfeldes zugewiesen [3] und die Anzahl der darin enthaltenen Felder in die Variable <b>intCount <\/b>geschrieben.<\/p>\n<p>Die Anweisungen innerhalb der nun folgenden Schleife [4] sorgen daf&uuml;r, dass die Bezeichnungs- und Textfelder sichtbar gemacht, ausgerichtet, auf die richtige Breite eingestellt und mit den entsprechenden Steuerelementinhalten gef&uuml;llt werden (Letzteres gilt nur f&uuml;r die Textfelder).<\/p>\n<p>Die Eigenschaft <b>ControlSource <\/b>der Textfelder erh&auml;lt dabei jeweils die Bezeichnung des entsprechenden Felds der Datenherkunft, die Eigenschaft <b>Caption <\/b>der Bezeichnungsfelder wird, soweit vorhanden, mit dem in der Eigenschaft <b>Description <\/b>des entsprechenden Felds der Datenherkunft angegebenen Wert, sonst mit dem Feldnamen gespeist.<\/p>\n<p>Schlie&szlig;lich erh&auml;lt das Unterformularsteuerelement noch den Fokus und der Datensatzzeiger wird auf den Datensatz des Lookup-Formulars eingestellt, der auch im zugrunde liegenden Kombinationfeld vor dem &Ouml;ffnen des Formulars ausgew&auml;hlt war. Liegt dort noch kein Wert vor, landet der Datensatzzeiger auf einem leeren, neuen Datensatz.<\/p>\n<p>Damit ist die Hauptarbeit getan und der Benutzer ist an der Reihe. Schauen wir uns zun&auml;chst an, was geschieht, wenn der Benutzer den Vorgang mit der Schaltfl&auml;che <b>Abbrechen <\/b>beendet. Dies l&ouml;st die folgende Routine aus, die einfach nur das Lookup-Formular schlie&szlig;t und keine &auml;nderung am zugrunde liegenden Kombinationsfeld durchf&uuml;hrt.<\/p>\n<pre>Private Sub cmdCancel_Click()\r\n    DoCmd.Close acForm, Me.Name\r\nEnd Sub<\/pre>\n<p>Schlie&szlig;t der Benutzer das Formular mit der <b>&Uuml;bernehmen<\/b>-Schaltfl&auml;che, l&ouml;st dies die folgende Routine aus. Diese pr&uuml;ft, ob der Benutzer einen vorhandenen Datensatz ausgew&auml;hlt hat, und stellt das aufrufende Kombinationsfeld auf diesen Datensatz ein.<\/p>\n<pre>Private Sub cmdClose_Click()\r\n    On Error Resume Next\r\n    ctl.Requery\r\n    If Err.Number &lt;&gt; 0 Then ctl.Undo\r\n    On Error GoTo Fehler\r\n    If Not Me!sfmListEditor.Form.NewRecord Then\r\n        If Me!sfmListEditor.Form.Dirty Then RunCommand acCmdSaveRecord\r\n        Me!sfmListEditor!txt1.SetFocus\r\n        ctl.Undo\r\n        ctl.Value = Me!sfmListEditor.Form.Recordset.Fields(0).Value\r\n    End If\r\n    DoCmd.Close acForm, Me.Name\r\n    ...\r\nEnd Sub<\/pre>\n<p><b>Auswahl per Doppelklick &uuml;bernehmen<\/b><\/p>\n<p>Eine weitere M&ouml;glichkeit, den Wert des aufrufenden Kombinationsfelds einzustellen, ist ein Doppelklick auf einen der Eintr&auml;ge des Unterformulars. Dazu besitzen die drei Textfelder eine Ereignisprozedur nach diesem Schema:<\/p>\n<pre>Private Sub txt1_DblClick(Cancel As Integer)\r\n    On Error Resume Next\r\n    Me.Parent.ValueDblClick\r\nEnd Sub<\/pre>\n<p>Die Ereignisprozedur ruft lediglich die Routine <b>ValueDblClick <\/b>des Hauptformulars auf. Diese pr&uuml;ft, ob der Datensatzzeiger auf einem neuen Datensatz steht, und bricht dann den Vorgang ab. Anderenfalls ruft sie die Prozedur <b>cmdClose_Click <\/b>auf und &uuml;bergibt wie im zuvor geschilderten Fall den ausgew&auml;hlten Wert an das aufrufende Kombinationsfeld:<\/p>\n<pre>Sub ValueDblClick()\r\n    If Me!sfmListEditor.Form.NewRecord Then _\r\n    Exit Sub\r\n    cmdClose_Click\r\nEnd Sub<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Unterformular<\/p>\n<p>Das Unterformular besitzt noch eine Ereignisprozedur, die beim Auftreten eines Fehlers ausgel&ouml;st wird &#8211; beispielsweise, wenn der Benutzer einen bereits vorhandenen Wert f&uuml;r die Lookuptabelle eintragen m&ouml;chte. Dies setzt voraus, dass Sie f&uuml;r das entsprechende Feld einen eindeutigen Index festgelegt haben. Au&szlig;erdem sollten Sie die Beziehung zwischen Haupt- und Lookup-Tabelle mit referenzieller Integrit&auml;t definieren, aber die L&ouml;schweitergabe nicht aktivieren. Somit tritt beim Versuch, einen Lookup-Datensatz zu l&ouml;schen, der Fehler 3200 auf und es erscheint eine entsprechende Meldung:<\/p>\n<pre>Private Sub Form_Error(DataErr As Integer, Response As Integer)\r\n    On Error GoTo Fehler\r\n    Response = acDataErrContinue\r\n    Select Case DataErr\r\n        Case 3200\r\n            MsgBox \"Der Datensatz ist bereits in anderen Tabellen als Lookup-Wert ausgew&auml;hlt und kann nicht gel&ouml;scht werden.\"\r\n        Case 3022, 3314, 3200\r\n            MsgBox DataErr\r\n        Case Else\r\n            Response = acDataErrDisplay\r\n            Exit Sub\r\n    End Select\r\n    Me.Undo\r\n    ...\r\nEnd Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit dem Lookup-Formular k&ouml;nnen Sie die Werte der als Datenherkunft f&uuml;r Kombinationsfelder dienenden Tabellen komfortabel &auml;ndern, indem Sie Datens&auml;tze hinzuf&uuml;gen oder l&ouml;schen oder bestehende Datens&auml;tze anpassen.<\/p>\n<p>Dazu brauchen Sie nur die weiter oben angegebenen Datenbankobjekte zu Ihrer Datenbank hinzuzuf&uuml;gen und das Kombinationsfeld mit einem entsprechenden Aufruf des Formulars <b>frmListEditor <\/b>versehen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>LookupdatenVerwalten.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{B71073AD-5E27-4ECE-B3AF-8413697055BE}\/aiu_665.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verkn&uuml;pfte Daten aus 1:n-Beziehungen stammen oft aus Tabellen, die nur ein Feld oder zumindest wenige Felder enthalten. Solche Daten zeigt man in Kombinationsfeldern an, die Bearbeitung erfolgt in der Regel in entsprechenden Formularen. Die Anzahl der Formulare steigt mit der Anzahl der Lookup-Tabellen und somit auch der Aufwand bei &Auml;nderungen. Dieser Beitrag zeigt, wie Sie sich die Arbeit vereinfachen und eine Menge Formulare sparen.<\/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":[662009,66032009,44000028,44000023,44000021],"tags":[],"class_list":["post-55000665","post","type-post","status-publish","format-standard","hentry","category-662009","category-66032009","category-Ergonomie_und_Benutzeroberflaeche","category-Mit_Formularen_arbeiten","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>Lookup-Daten verwalten - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lookup-Daten verwalten\" \/>\n<meta property=\"og:description\" content=\"Verkn&uuml;pfte Daten aus 1:n-Beziehungen stammen oft aus Tabellen, die nur ein Feld oder zumindest wenige Felder enthalten. Solche Daten zeigt man in Kombinationsfeldern an, die Bearbeitung erfolgt in der Regel in entsprechenden Formularen. Die Anzahl der Formulare steigt mit der Anzahl der Lookup-Tabellen und somit auch der Aufwand bei &Auml;nderungen. Dieser Beitrag zeigt, wie Sie sich die Arbeit vereinfachen und eine Menge Formulare sparen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:23:16+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c\" \/>\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=\"12\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Lookup-Daten verwalten\",\"datePublished\":\"2020-05-22T22:23:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/\"},\"wordCount\":2088,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/56628ca82b1843c2b47b921bf922870c\",\"articleSection\":[\"2009\",\"3\\\/2009\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"Mit Formularen arbeiten\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/\",\"name\":\"Lookup-Daten verwalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/56628ca82b1843c2b47b921bf922870c\",\"datePublished\":\"2020-05-22T22:23:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/56628ca82b1843c2b47b921bf922870c\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/56628ca82b1843c2b47b921bf922870c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/LookupDaten_verwalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lookup-Daten verwalten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Lookup-Daten verwalten - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/","og_locale":"de_DE","og_type":"article","og_title":"Lookup-Daten verwalten","og_description":"Verkn&uuml;pfte Daten aus 1:n-Beziehungen stammen oft aus Tabellen, die nur ein Feld oder zumindest wenige Felder enthalten. Solche Daten zeigt man in Kombinationsfeldern an, die Bearbeitung erfolgt in der Regel in entsprechenden Formularen. Die Anzahl der Formulare steigt mit der Anzahl der Lookup-Tabellen und somit auch der Aufwand bei &Auml;nderungen. Dieser Beitrag zeigt, wie Sie sich die Arbeit vereinfachen und eine Menge Formulare sparen.","og_url":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:23:16+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"12\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Lookup-Daten verwalten","datePublished":"2020-05-22T22:23:16+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/"},"wordCount":2088,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c","articleSection":["2009","3\/2009","Ergonomie und Benutzeroberfl\u00e4che","Mit Formularen arbeiten","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/","url":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/","name":"Lookup-Daten verwalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c","datePublished":"2020-05-22T22:23:16+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/56628ca82b1843c2b47b921bf922870c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/LookupDaten_verwalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Lookup-Daten verwalten"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000665","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=55000665"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000665\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}