{"id":55000940,"date":"2014-08-01T00:00:00","date_gmt":"2020-05-22T21:11:21","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=940"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Neue_Werte_in_LookupFeldern","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/","title":{"rendered":"Neue Werte in Lookup-Feldern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manchmal m&ouml;chten Sie schnell mit ein paar Zeilen Code eine Funktion programmieren, mit der ein neuer Datensatz zu einer Tabelle mit einem eindeutigen Index hinzugef&uuml;gt wird. Dies geschieht bevorzugt bei Lookup-Tabellen. Dort kommt es aber schnell dazu, dass der Benutzer einen neuen Datensatz hinzuf&uuml;gt, der bereits vorhanden ist. In diesem Beitrag zeigen wir, wie Sie solche F&auml;lle umschiffen oder den Benutzer gegebenenfalls einen neuen Wert eingeben lassen.<\/b><\/p>\n<p><b>Lookup-Tabellen<\/b><\/p>\n<p>Warum benutzt man eigentlich Lookup-Tabellen Der wichtigste Grund ist wohl, dass man die m&ouml;glichen Werte nur je einmal in eine separate Tabelle eingibt und von anderen Tabellen darauf verweisen kann, indem man diese &uuml;ber ein Fremdschl&uuml;sselfeld mit dem Prim&auml;rschl&uuml;sselwert dieser Tabelle verkn&uuml;pft.<\/p>\n<p>Nun legt man nicht immer nur &uuml;ber die Benutzeroberfl&auml;che neue Datens&auml;tze an, bei denen man bequem etwa per Kombinationsfeld einen der vorhandenen verkn&uuml;pften Datens&auml;tze ausw&auml;hlt &#8211; zum Beispiel eine Anrede oder eine Kategorie.  Gelegentlich sollen auch neue Datens&auml;tze beim Anlegen &uuml;ber die Benutzeroberfl&auml;che hinzugef&uuml;gt werden oder Sie wollen vielleicht Daten aus einer anderen Datenbank importieren, wo die Daten noch in einer Tabelle vorliegen.<\/p>\n<p><b>Eindeutiger Schl&uuml;ssel<\/b><\/p>\n<p>Wenn Sie eine solche Lookup-Tabelle verwenden &#8211; wie etwa die Tabelle <b>tblKategorien <\/b>aus Bild 1 -, dann haben Sie verschiedene M&ouml;glichkeiten, um sicherzustellen, dass jede Kategorie nur einmal eingegeben wird. Die einfachste ist, einfach wie in der Abbildung einen eindeutigen Index f&uuml;r dieses Feld anzulegen. Dazu w&auml;hlen Sie f&uuml;r die Eigenschaft <b>Indiziert <\/b>einfach den Wert <b>Ja (Ohne Duplikate) <\/b>aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_001.png\" alt=\"Tabelle mit eindeutig indiziertem Feld\" width=\"575\" height=\"349,4019\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Tabelle mit eindeutig indiziertem Feld<\/span><\/b><\/p>\n<p>Achtung: Dies ist f&uuml;r Tabellen mit bestehenden Daten etwas komplizierter. Es kann immerhin vorkommen, dass Benutzer es geschafft haben, den gleichen Datensatz mehrfach in einer Lookup-Tabelle einzugeben. Wenn dort also beispielsweise zwei Mal die gleiche Kategorie enthalten ist und Sie dann versuchen, f&uuml;r das Feld <b>Kategorie <\/b>einen eindeutigen Index zu definieren, erhalten Sie eine entsprechende Fehlermeldung (s. Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_002.png\" alt=\"Fehlermeldung beim Versuch, einen eindeutigen Index f&uuml;r ein Feld mit nicht eindeutigen Daten anzulegen\" width=\"700\" height=\"102,8088\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Fehlermeldung beim Versuch, einen eindeutigen Index f&uuml;r ein Feld mit nicht eindeutigen Daten anzulegen<\/span><\/b><\/p>\n<p>In diesem Fall m&uuml;ssen Sie die Daten zuvor noch vereinheitlichen. Wie das gelingt, lesen Sie im Beitrag <b>Lookup-Daten: Aus zwei mach eins <\/b>(<b>www.access-im-unternehmen.de\/946<\/b>).<\/p>\n<p>Wenn die Daten jedoch keine Redundanzen aufweisen, k&ouml;nnen Sie den eindeutigen Index problemlos anlegen. Anschlie&szlig;end f&uuml;hrt der Versuch, einen neuen Datensatz mit einem bereits vorhandenem Wert in dem eindeutig indizierten Feld anzulegen, wiederum zu einem Fehler. Interessanterweise erhalten wir hier genau die gleiche Fehlermeldung wie bei dem Versuch, einen eindeutigen Index f&uuml;r ein Feld mit nicht eindeutigen Werten anzulegen.<\/p>\n<p>Nun wollen wir dem Benutzer sicher nicht diese Fehlermeldung pr&auml;sentieren, sondern eine, mit der er etwas mehr anfangen kann.<\/p>\n<p><b>Lookup-Werte per Formular eingeben<\/b><\/p>\n<p>In Bild 3 haben wir die einfachste Konstellation f&uuml;r die Eingabe von Werten in eine Lookup-Tabelle geschaffen. Der Benutzer kann aus dem Kombinationsfeld eine Kategorie ausw&auml;hlen, aber auch neue Werte eingeben &#8211; zumindest scheinbar. Denn wenn er wirklich einen neuen Wert dort eingibt, der noch nicht in der Datensatzherkunft dieses Steuerelements vorhanden ist, erscheint wiederum eine Fehlermeldung (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_003.png\" alt=\"Einfaches Formular mit einem Kombinationsfeld zur Eingabe oder Auswahl von Lookup-Werten\" width=\"450\" height=\"210,4973\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Einfaches Formular mit einem Kombinationsfeld zur Eingabe oder Auswahl von Lookup-Werten<\/span><\/b><\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_004.png\" alt=\"Fehler beim Versuch, einen Wert in ein unvorbereitetes Lookup-Feld einzugeben\" width=\"575\" height=\"226,4665\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Fehler beim Versuch, einen Wert in ein unvorbereitetes Lookup-Feld einzugeben<\/span><\/b><\/p>\n<p>Um dies zu verhindern und den neuen Wert gleich in die Tabelle <b>tblKategorien<\/b> zu schreiben, legen Sie eine Ereignisprozedur an, die durch das Ereignis <b>Bei nicht in Liste <\/b>des Kombinationsfeldes ausgel&ouml;st wird. Diese sieht wie in Listing 1 aus. Diese Ereignisprozedur liefert gleich zwei entsprechende Parameter, wobei der erste, <b>NewData<\/b>, den Wert des neuen Eintrags liefert und der zweite, <b>Response<\/b>, einen Wert erwartet, der die weitere Vorgehensweise festlegt. In diesem Fall legt die Prozedur gleich einen neuen Eintrag in der Tabelle <b>tblKategorien <\/b>mit dem mit <b>NewData <\/b>gelieferten Kategorienamen an. Dann stellt sie Response auf <b>acDataErrAdded <\/b>ein, was f&uuml;r den weiteren Verlauf festlegt, dass Access keine Fehlermeldung liefert, sondern direkt den neuen Wert im Kombinationsfeld ausw&auml;hlt. Die Datensatzherkunft wird auf diesem Wege gleich mit aktualisiert.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>KategorieID_NotInList(NewData<span style=\"color:blue;\"> As String<\/span>, Response<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"INSERT INTO tblKategorien(Kategorie) VALUES(''\" & NewData & \"'')\", dbFailOnError\r\n     Response = acDataErrAdded\r\n     <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Hinzuf&uuml;gen eines neuen Datensatzes &uuml;ber die Eingabe in ein Kombinationsfeld<\/span><\/b><\/p>\n<p><b>Hinzuf&uuml;gen mit R&uuml;ckfrage<\/b><\/p>\n<p>Gegebenenfalls m&ouml;chten Sie den Benutzer dennoch darauf hinweisen, dass er gerade einen neuen Wert zur Liste hinzuf&uuml;gt. Zu Beispielzwecken kopieren wir das Kombinationsfeld <b>cboKategorien<\/b> in ein neues Steuerelement namens <b>cboKategorien_II<\/b>. F&uuml;r dieses hinterlegen wir nun wiederum eine Ereignisprozedur f&uuml;r das Ereignis <b>Bei Nicht in Liste<\/b>. Diese sieht nun wie in Listing 2 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboKategorien_II_NotInList(NewData<span style=\"color:blue;\"> As String<\/span>, Response<span style=\"color:blue;\"> As Integer<\/span>)\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>bolHinzufuegen<span style=\"color:blue;\"> As Boolean<\/span>\r\n     bolHinzufuegen = <span style=\"color:blue;\">MsgBox<\/span>(\"Diesen Eintrag zur Liste hinzuf&uuml;gen\", _\r\n         vbYesNo + vbExclamation, \"Neuer Eintrag\") = vbYes\r\n     <span style=\"color:blue;\">If <\/span>bolHinzufuegen = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         db.Execute \"INSERT INTO tblKategorien(Kategorie) VALUES(''\" & NewData & \"'')\", dbFailOnError\r\n         Response = acDataErrAdded\r\n         <span style=\"color:blue;\">Set<\/span> db = Nothing\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Response = acDataErrContinue\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 2: Hinzuf&uuml;gen eines neuen Datensatzes mit R&uuml;ckfrage<\/span><\/b><\/p>\n<p>Die Prozedur zeigt ein Meldungsfenster an, mit dem es den Benutzer fragt, ob der Eintrag wirklich zur Liste hinzugef&uuml;gt werden soll. Das Ergebnis dieses Meldungsfensters (<b>vbYes <\/b>oder <b>vbNo<\/b>) vergleicht die Prozedur dann mit dem Wert <b>vbYes<\/b>. Dieses Resultat wiederum landet in der Variablen <b>bolHinzufuegen<\/b>. An dieser Stelle ist es wichtig, das Ergebnis des Meldungsfensters nicht direkt in der Variablen <b>bolHinzufuegen<\/b> zu speichern: <b>vbYes <\/b>hat n&auml;mlich den Wert <b>6<\/b>, <b>vbNo <\/b>hat den Wert <b>7<\/b>. Wenn Sie einer Boolean-Variablen den Wert <b>6 <\/b>oder <b>7 <\/b>(oder eine andere positive Zahl) zuweisen, erh&auml;lt diese den Wert <b>True<\/b>. Das bedeutet: Egal, ob der Benutzer auf <b>Ja <\/b>oder <b>Nein <\/b>klickt, die Variable <b>bolHinzufuegen <\/b>w&uuml;rde immer mit dem Wert <b>True <\/b>gef&uuml;llt werden.<\/p>\n<p>Also schreiben wir ordnungsgem&auml;&szlig; das Ergebnis aus dem Vergleich der <b>MsgBox<\/b>-Funktion mit dem Wert <b>vbYes <\/b>in die Variable <b>bolHinzufuegen<\/b>. Beim Eintragen eines noch nicht vorhandenen Wertes in das Kombinationsfeld erscheint nun die Meldung aus Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_005.png\" alt=\"R&uuml;ckfrage vor dem Hinzuf&uuml;gen eines neuen Wertes\" width=\"450\" height=\"226,1618\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: R&uuml;ckfrage vor dem Hinzuf&uuml;gen eines neuen Wertes<\/span><\/b><\/p>\n<p>Klickt der Benutzer auf <b>Ja<\/b>, werden die Anweisungen ausgef&uuml;hrt, die wir bereits aus dem vorherigen Beispiel kennen. Anderenfalls gibt die Prozedur &uuml;ber den Parameter <b>Response <\/b>den Wert <b>acDataErrContinue <\/b>zur&uuml;ck. Das hei&szlig;t: Access soll keine Fehlermeldung ausgeben. Stattdessen wird einfach nur das aufgeklappte Kombinationsfeld angezeigt (s. Bild 6). Zus&auml;tzlich k&ouml;nnten Sie noch das Kombinationsfeld leeren &#8211; etwa mit folgender Anweisung, die Sie ebenfalls in den <b>Else<\/b>-Zweig der <b>If&#8230;Then<\/b>-Bedingung schreiben:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_006.png\" alt=\"Soll der Wert nicht zur Liste hinzugef&uuml;gt werden, bleibt dieser im Feld stehen und das Kombinationsfeld wird aufgeklappt.\" width=\"450\" height=\"218,5252\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Soll der Wert nicht zur Liste hinzugef&uuml;gt werden, bleibt dieser im Feld stehen und das Kombinationsfeld wird aufgeklappt.<\/span><\/b><\/p>\n<pre>Me!cboKategorien_II = Null<\/pre>\n<p><b>Neuer Lookup-Wert per InputBox<\/b><\/p>\n<p>Nun gibt es allerdings Benutzer, die nicht st&auml;ndig mit Access arbeiten und auch von anderen Anwendungen m&ouml;glicherweise nicht die M&ouml;glichkeit kennen, neue Werte direkt in ein Auswahlfeld einzugeben. Formulare auf Internetangeboten bieten dies beispielsweise gar nicht an &#8211; dort gibt es lediglich reine Auswahlsteuerelemente.<\/p>\n<p>Um die Dateneingabe etwas intuitiver zu gestalten, f&uuml;gen wir neben dem Kombinationsfeld also noch ein Steuerelement mit der Beschriftung <b>Hinzuf&uuml;gen <\/b>hinzu (je nach Platzangebot l&auml;sst sich dies auch auf ein Plus-Zeichen (+) verk&uuml;rzen oder, wenn Sie eine aktuelle Version von Access verwenden, durch ein entsprechendes Icon). Die Schaltfl&auml;che erh&auml;lt den Namen <b>cmdHinzufuegen <\/b>und soll beim Anklicken eine Inputbox anzeigen, die den Benutzer zur Eingabe eines neuen Wertes f&uuml;r die Lookup-Tabelle auffordert.<\/p>\n<p>F&uuml;r die Schaltfl&auml;che <b>cmdHinzufuegen <\/b>hinterlegen Sie die Ereignisprozedur aus Listing 3, die durch das Ereignis <b>Beim Klicken <\/b>ausgel&ouml;st wird. Die Prozedur ermittelt zun&auml;chst mit einer Inputbox den neuen Eintrag f&uuml;r das Kombinationsfeld (s. Bild 7) und speichert diesen in der Variablen <b>strInhalt<\/b>. Wenn die Variable eine leere Zeichenkette enth&auml;lt, spricht dies daf&uuml;r, dass der Benutzer entweder tats&auml;chlich nichts eingegeben oder auf die <b>Abbrechen<\/b>-Schaltfl&auml;che geklickt hat. In diesem Fall soll nichts geschehen &#8211; genauso wie in dem Fall, dass der Benutzer einfach auf <b>OK <\/b>geklickt hat und somit der in der <b>InputBox<\/b>-Anweisung angegebene Default-Wert (hier <b>[Neue Kategorie eingeben]<\/b>) in die Variable <b>strInhalt <\/b>&uuml;bernommen wurde.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_04\/pic_940_007.png\" alt=\"Eingabe des neuen Wertes per Inputbox\" width=\"500\" height=\"290,2397\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Eingabe des neuen Wertes per Inputbox<\/span><\/b><\/p>\n<p>Die Prozedur ruft nun eine eigene Funktion auf, die sich um das Hinzuf&uuml;gen des neuen Datensatzes k&uuml;mmert &#8211; und um noch mehr! Denn immerhin geraten wir mit der Inputbox au&szlig;erhalb der Kontrolle des Kombinationsfeldes. Dieses hat ja, wie in den vorherigen Beispielen zu sehen, sehr sch&ouml;n aufgepasst, dass wir keine bereits vorhandenen Werte in die Lookup-Tabelle eintragen. Diese Funktion hei&szlig;t <b>LookupIDErmitteln <\/b>und wird gleich im Anschluss beschrieben.<\/p>\n<p>Sie erwartet einige f&uuml;r die Verarbeitung n&ouml;tige Parameter und liefert den Prim&auml;rschl&uuml;sselwert f&uuml;r den neuen oder gegebenenfalls einen bereits vorhandenen Datensatz mit dem gleichen Wert im indizierten Feld zur&uuml;ck. Diesen verarbeitet die Prozedur <b>cmdHinzuf&uuml;gen_Click <\/b>derart, dass das Kombinationsfeld nach der Aktualisierung seiner Datensatzherkunft direkt auf den neuen Wert eingestellt wird.<\/p>\n<p><b>Lookup-Wert per Code einf&uuml;gen<\/b><\/p>\n<p>Die soeben erw&auml;hnte Funktion <b>Lookup-ID-Ermitteln <\/b>sieht wie in Listing 4 aus. Sie erwartet die folgenden Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>LookupIDErmitteln(strTabelle<span style=\"color:blue;\"> As String<\/span>, strPrimaerschluesselfeld<span style=\"color:blue;\"> As String<\/span>, _\r\n         strInhaltsfeld<span style=\"color:blue;\"> As String<\/span>, strInhalt<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngTempID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     lngTempID = Nz(DLookup(strPrimaerschluesselfeld, strTabelle, strInhaltsfeld & \" = ''\" _\r\n         & strInhalt & \"''\"), 0)\r\n     <span style=\"color:blue;\">If <\/span>lngTempID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         db.Execute \"INSERT INTO \" & strTabelle & \"(\" & strInhaltsfeld & \") VALUES(''\" _\r\n             & strInhalt & \"'')\", dbFailOnError\r\n         lngTempID = db.OpenRecordset(\"SELECT @@IDENTITY\").Fields(0)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     LookupIDErmitteln = lngTempID\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Prim&auml;rschl&uuml;sselwert eines neuen oder gegebenenfalls vorhandenen Wertes zur&uuml;ckliefern<\/span><\/b><\/p>\n<ul>\n<li><b>strTabelle<\/b>: Name der Tabelle, zu welcher der Wert hinzugef&uuml;gt werden soll<\/li>\n<li><b>strPrimaerschluesselfeld<\/b>: Name des Prim&auml;rschl&uuml;sselfeldes dieser Tabelle<\/li>\n<li><b>strInhaltsfeld<\/b>: Feld, das den neuen Wert aufnehmen soll<\/li>\n<li><b>strInhalt<\/b>: Neuer Wert f&uuml;r dieses Feld<\/li>\n<\/ul>\n<p>Die Prozedur versucht zun&auml;chst, mit einer <b>DLookup<\/b>-Funktion den Prim&auml;rschl&uuml;sselwert f&uuml;r einen Datensatz der angegebenen Tabelle zu finden, der den hinzuzuf&uuml;genden Wert in dem betroffenen Feld aufweist. Wenn man die Parameter durch die &uuml;bergebenen Werte ersetzt, w&uuml;rde die <b>DLookup<\/b>-Anweisung wie folgt aussehen:<\/p>\n<pre>DLookup(\"KategorieID\",  \"tblKategorien\", \"Kategorie =  ''&lt;Neue Kategorie&gt;''\")<\/pre>\n<p>F&uuml;r den Fall, dass der Eintrag noch nicht vorhanden ist, fassen wir die <b>DLookup<\/b>-Funktion noch in die <b>Nz<\/b>-Funktion ein &#8211; diese liefert in dem Fall, dass <b>DLookup <\/b>den Wert <b>Null <\/b>zur&uuml;ckliefert, den Wert <b>0 <\/b>zur&uuml;ck.<\/p>\n<p>Enth&auml;lt <b>lngTempID <\/b>nun den Wert <b>0<\/b>, was darauf hindeutet, dass der neu eingegebene Wert tats&auml;chlich noch nicht in der Zieltabelle enthalten ist, legt die Funktion den Datensatz neu an. Dazu ruft sie per <b>Execute<\/b>-Methode des <b>Database<\/b>-Objekts f&uuml;r die aktuelle Datenbank eine entsprechende <b>INSERT INTO<\/b>-Anweisung auf, die etwa so aussehen k&ouml;nnte:<\/p>\n<pre>INSERT INTO tblKategorien(Kategorie) VALUES(''&lt;Neue Kategorie'')\"<\/pre>\n<p>Den Prim&auml;rschl&uuml;sselwert f&uuml;r den neuen Datensatz ermittelt die Funktion dann mithilfe der Abfrage <b>SELECT @@IDENTITY<\/b>. Diese liefert jeweils den Wert des zuletzt in dieser Session angelegten Autowertes. Dieser Wert wird dann auch als Funktionswert zur&uuml;ckgeliefert.<\/p>\n<p>War der Wert von <b>lngTempID <\/b>jedoch bereits nach dem Aufruf der <b>DLookup<\/b>-Funktion ungleich <b>0<\/b>, dann werden die Anweisungen innerhalb der <b>If&#8230;Then<\/b>-Bedingung nicht ausgef&uuml;hrt und die Prozedur gibt gleich den Prim&auml;rschl&uuml;sselwert des per <b>DLookup <\/b>ermittelten Datensatzes zur&uuml;ck.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>NeueWerteInLookupFeldern.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{C89FEA6A-E0FF-459B-9C5D-C9CFE75D232C}\/aiu_940.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal m&ouml;chten Sie schnell mit ein paar Zeilen Code eine Funktion programmieren, mit der ein neuer Datensatz zu einer Tabelle mit einem eindeutigen Index hinzugef&uuml;gt wird. Dies geschieht bevorzugt bei Lookup-Tabellen. Dort kommt es aber schnell dazu, dass der Benutzer einen neuen Datensatz hinzuf&uuml;gt, der bereits vorhanden ist. In diesem Beitrag zeigen wir, wie Sie solche F&auml;lle umschiffen oder den Benutzer gegebenenfalls einen neuen Wert eingeben lassen.<\/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":[662014,66042014,44000021],"tags":[],"class_list":["post-55000940","post","type-post","status-publish","format-standard","hentry","category-662014","category-66042014","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>Neue Werte in Lookup-Feldern - 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\/Neue_Werte_in_LookupFeldern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Neue Werte in Lookup-Feldern\" \/>\n<meta property=\"og:description\" content=\"Manchmal m&ouml;chten Sie schnell mit ein paar Zeilen Code eine Funktion programmieren, mit der ein neuer Datensatz zu einer Tabelle mit einem eindeutigen Index hinzugef&uuml;gt wird. Dies geschieht bevorzugt bei Lookup-Tabellen. Dort kommt es aber schnell dazu, dass der Benutzer einen neuen Datensatz hinzuf&uuml;gt, der bereits vorhanden ist. In diesem Beitrag zeigen wir, wie Sie solche F&auml;lle umschiffen oder den Benutzer gegebenenfalls einen neuen Wert eingeben lassen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:11:21+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Neue Werte in Lookup-Feldern\",\"datePublished\":\"2020-05-22T21:11:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/\"},\"wordCount\":1796,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/b60edf6f7b3c44e491a1bc29c93aea94\",\"articleSection\":[\"2014\",\"4\\\/2014\",\"Tabellen und Datenmodellierung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/\",\"name\":\"Neue Werte in Lookup-Feldern - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/b60edf6f7b3c44e491a1bc29c93aea94\",\"datePublished\":\"2020-05-22T21:11:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/b60edf6f7b3c44e491a1bc29c93aea94\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/b60edf6f7b3c44e491a1bc29c93aea94\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Neue_Werte_in_LookupFeldern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Neue Werte in Lookup-Feldern\"}]},{\"@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":"Neue Werte in Lookup-Feldern - 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\/Neue_Werte_in_LookupFeldern\/","og_locale":"de_DE","og_type":"article","og_title":"Neue Werte in Lookup-Feldern","og_description":"Manchmal m&ouml;chten Sie schnell mit ein paar Zeilen Code eine Funktion programmieren, mit der ein neuer Datensatz zu einer Tabelle mit einem eindeutigen Index hinzugef&uuml;gt wird. Dies geschieht bevorzugt bei Lookup-Tabellen. Dort kommt es aber schnell dazu, dass der Benutzer einen neuen Datensatz hinzuf&uuml;gt, der bereits vorhanden ist. In diesem Beitrag zeigen wir, wie Sie solche F&auml;lle umschiffen oder den Benutzer gegebenenfalls einen neuen Wert eingeben lassen.","og_url":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:11:21+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Neue Werte in Lookup-Feldern","datePublished":"2020-05-22T21:11:21+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/"},"wordCount":1796,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94","articleSection":["2014","4\/2014","Tabellen und Datenmodellierung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/","url":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/","name":"Neue Werte in Lookup-Feldern - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94","datePublished":"2020-05-22T21:11:21+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/b60edf6f7b3c44e491a1bc29c93aea94"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Neue_Werte_in_LookupFeldern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Neue Werte in Lookup-Feldern"}]},{"@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\/55000940","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=55000940"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000940\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}