{"id":55000689,"date":"2009-12-01T00:00:00","date_gmt":"2020-05-22T22:18:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=689"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Listenfeld_und_Details_in_einem_Formular","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/","title":{"rendered":"Listenfeld und Details in einem Formular"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Eine sch&ouml;n modular aufgebaute Benutzeroberfl&auml;che zeigt &Uuml;bersichtslisten und Detailansichten in eigenen Formularen an. Manchmal will man aber der &Uuml;bersicht halber beides in einem haben: Das Listenfeld bietet die wichtigsten Informationen zur Auswahl an und per Mausklick lassen sich die Details zum gew&uuml;nschten Datensatz direkt daneben oder darunter betrachten. Wie Sie ein solches Formular erstellen, zeigt dieser Beitrag.<\/b><\/p>\n<p>Die Daten eines Formulars, das &Uuml;bersichtsliste und Details gleichzeitig anzeigt, stammen logischerweise aus der gleichen Tabelle. Diese hei&szlig;t in unserer Beispieldatenbank <b>tblPersonen <\/b>und ist ganz einfach aufgebaut: Sie besteht lediglich aus dem Prim&auml;rschl&uuml;sselfeld <b>PersonID <\/b>und den beiden Feldern <b>Vorname <\/b>und <b>Nachname<\/b>.<\/p>\n<p><b>Funktionen des Formulars<\/b><\/p>\n<p>Das Formular soll zun&auml;chst einmal gew&auml;hrleisten, dass das Listenfeld den Nachnamen aller Datens&auml;tze der Beispieltabelle <b>tblPersonen <\/b>anzeigt und diese somit zur Auswahl anbietet. Per Mausklick auf einen der Eintr&auml;ge sollen die Details des gew&auml;hlten Datensatzes im Formular angezeigt werden.<\/p>\n<p>Dies ist der erste Schritt &#8211; im zweiten kommen wir dann zu den Bearbeitungsfunktionen. Dabei soll der Benutzer &uuml;ber dieses Formular neue Datens&auml;tze hinzuf&uuml;gen und vorhandene Datens&auml;tze bearbeiten und l&ouml;schen k&ouml;nnen. Dies alles erfordert nat&uuml;rlich eine zeitnahe Aktualisierung, was allerdings nicht ganz trivial ist. Zun&auml;chst jedoch bauen wir das Grundger&uuml;st des Formulars auf.<\/p>\n<p><b>Detailformular<\/b><\/p>\n<p>Das Formular ist prinzipiell genau so aufgebaut wie ein handels&uuml;bliches Detailformular. Das bedeutet, dass wir mit der Tabelle <b>tblPersonen <\/b>eine Datenherkunft festlegen und die in der Tabelle enthaltenen Felder als gebundene Felder zum Formular hinzuf&uuml;gen. Die Datenherkunft stellen Sie in der Entwurfsansicht &uuml;ber die gleichnamige Eigenschaft ein. Gleich danach k&ouml;nnen Sie die Felder der Datenherkunft aus der Feldliste (Men&uuml;eintrag <b>Ansicht|Feldliste<\/b>) in den Detailbereich des Formularentwurfs ziehen (siehe Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic001_opt.jpeg\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Hinzuf&uuml;gen gebundener Felder zum Formularentwurf<\/span><\/b><\/p>\n<p><b>Navigation deaktivieren<\/b><\/p>\n<p>Sie k&ouml;nnen mit dem Formular in der Formularansicht nun wie gewohnt Daten eingeben. Zum Anlegen eines neuen Datensatzes klicken Sie auf die entsprechende Schaltfl&auml;che der Navigationsleiste, zum L&ouml;schen markieren Sie den Datensatz &uuml;ber den grauen Balken am linken Rand und bet&auml;tigen anschlie&szlig;end die L&ouml;schen-Taste.<\/p>\n<p><b>Listenfeld hinzuf&uuml;gen<\/b><\/p>\n<p>Anschlie&szlig;end f&uuml;gen Sie ein Listenfeld zum Formular hinzu, das im Entwurf nun beispielsweise wie in Bild 2 aussieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic002_opt.jpeg\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Das Formular mit Listenfeld und gebundenen Steuerelementen<\/span><\/b><\/p>\n<p>F&uuml;r das Listenfeld legen Sie als Datensatzherkunft eine Abfrage namens <b>qryPersonen <\/b>fest, die auf der Tabelle <b>tblPersonen <\/b>basiert und wie in Bild 3 aussieht. Die Abfrage setzt die Felder der Tabelle <b>tblPersonen <\/b>nach dem Schema <b>&lt;Nachname&gt;, &lt;Vorname&gt; <\/b>zusammen und sortiert die Ergebnisliste alphabetisch nach dem Inhalt dieses Abfragefelds.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic003_opt.jpeg\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Diese Abfrage dient als Datensatzherkunft f&uuml;r das Listenfeld lstPersonen.<\/span><\/b><\/p>\n<p>Damit k&ouml;nnen Sie nun das Listenfeld best&uuml;cken, dem Sie zun&auml;chst den Namen <b>lstPersonen<\/b> zuweisen. Dann stellen Sie die Eigenschaft <b>Datensatzherkunft <\/b>auf den Wert <b>qryPersonen <\/b>ein.<\/p>\n<p>Damit das Listenfeld nur die Bezeichnung der Person und nicht die ID anzeigt, setzen Sie au&szlig;erdem die beiden Eigenschaften <b>Spaltenanzahl <\/b>und <b>Spaltenbreiten <\/b>auf <b>2 <\/b>beziehungsweise <b>0cm<\/b>. Auf diese Weise wird die erste Spalte der Datensatzherkunft ausgeblendet und nur die zweite Spalte angezeigt.<\/p>\n<p>Sie k&ouml;nnten auch die erste Spalte anzeigen, aber gew&ouml;hnlich ist ihr Wert v&ouml;llig uninteressant. Sie muss aber trotzdem in der Datensatzherkunft enthalten sein, weil sie ihre Eintr&auml;ge eindeutig macht und somit sp&auml;ter hilft, auch den ausgew&auml;hlten Datensatz in der Detailansicht anzuzeigen.<\/p>\n<p><b>Details anzeigen per Mausklick<\/b><\/p>\n<p>Wenn Sie bereits einige Beispieldatens&auml;tze in die Tabelle eingegeben haben, sollten die gebundenen Steuerelemente des Formulars sowie das Listenfeld bereits die gew&uuml;nschten Daten anzeigen (siehe Bild 4).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic004_opt.jpeg\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Formular mit fehlender Synchronisation<\/span><\/b><\/p>\n<p>Dummerweise geschieht noch nichts, wenn wir einen anderen Datensatz aus dem Listenfeld ausw&auml;hlen, aber es sollte eigentlich beim &Ouml;ffnen des Formulars gleich der oberste Eintrag im Listenfeld markiert sein und gleichzeitig im Detail angezeigt werden.<\/p>\n<p><b>Ersten Datensatz markieren<\/b><\/p>\n<p>K&uuml;mmern wir uns also erstmal darum, dass unser Listenfeld den ersten Datensatz gleich beim &Ouml;ffnen des Formulars markiert. Legen wir also eine Ereignisprozedur f&uuml;r das Ereignis <b>Beim Laden <\/b>des Formulars an und f&uuml;llen es wie folgt:<\/p>\n<pre>Private Sub Form_Load()\r\n    Me!lstPersonen = Me!lstPersonen.ItemData(0)\r\n    Me.Recordset.FindFirst \"PersonID = \" _\r\n    &amp; Me!lstPersonen\r\n    End Sub<\/pre>\n<p>Die erste Anweisung dieser Prozedur weist dem Listenfeld als Wert den Inhalt der gebundenen Spalte (also der ersten Spalte) des ersten Eintrags des Listenfelds zu, wodurch dieser markiert wird. Die zweite ruft die <b>FindFirst<\/b>-Methode des im Formular enthaltenen Recordsets auf und sorgt so daf&uuml;r, dass das Formular den Datensatz mit der gleichen ID des im Listenfeld ausgew&auml;hlten Eintrags anzeigt.<\/p>\n<p><b>Ausgew&auml;hlten Datensatz anzeigen<\/b><\/p>\n<p>Danach k&uuml;mmern wir uns um die Synchronisation zwischen Listenfeld und Detailansicht &#8211; zun&auml;chst vom Listenfeld aus. Wir verwenden die Ereigniseigenschaft <b>Nach Aktualisierung<\/b>, um nach Auswahl eines anderen Eintrags die folgende Ereignisprozedur auszul&ouml;sen:<\/p>\n<pre>Private Sub lstPersonen_AfterUpdate()\r\n    Me.Recordset.FindFirst \"PersonID = \" _\r\n    &amp; Me!lstPersonen\r\n    End Sub<\/pre>\n<p>Die einzige Anweisung dieser Prozedur d&uuml;rfte Ihnen bekannt vorkommen &#8211; sie wurde bereits weiter oben f&uuml;r die Auswahl des Detaildatensatzes verwendet.<\/p>\n<p><!--30percent--><\/p>\n<p>F&uuml;r den ersten Schritt reicht dies schon: Sie k&ouml;nnen den ausgew&auml;hlten Datensatz bearbeiten, neue Datens&auml;tze hinzuf&uuml;gen und bestehende Datens&auml;tze l&ouml;schen &#8211; allerdings ohne direktes Aktualisieren des Listenfelds. Dies holen wir nun nach.<\/p>\n<p><b>&auml;nderungen aktualisieren<\/b><\/p>\n<p>Immer wenn es um das Aktualisieren von Formularen oder Steuerelementen geht, muss man einen geeigneten Zeitpunkt ausw&auml;hlen. Der letztm&ouml;gliche Zeitpunkt f&uuml;r die Aktualisierung des Listenfelds bei &auml;nderung der Details eines darin angezeigten Datensatzes ist der Zeitpunkt des Speicherns, der fr&uuml;heste ist der Zeitpunkt, zu dem der Benutzer einen der im Listenfeld angezeigten Werte &auml;ndert.<\/p>\n<p>Wir schauen uns zun&auml;chst an, wie das beim Speichern des aktuellen Detaildatensatzes des Formulars funktioniert. Das passende Ereignis hei&szlig;t <b>Nach Aktualisierung<\/b>. Es wird zum Beispiel ausgel&ouml;st, wenn Sie &auml;nderungen am Datensatz vorgenommen haben und diesen dann durch Anklicken des Datensatzmarkierers speichern oder zu einem anderen Datensatz wechseln. F&uuml;r dieses Ereignis legen Sie die folgende Ereignisprozedur an:<\/p>\n<pre>Private Sub Form_AfterUpdate()\r\n    Me!lstPersonen.Requery\r\n    End Sub<\/pre>\n<p>Diese aktualisiert einfach nur die im Listenfeld angezeigten Daten. Dabei wird ein gro&szlig;er Vorteil gegen&uuml;ber der Darstellung der Liste etwa mit einem Unterformular in der Datenblattansicht sichtbar: Das Listenfeld aktualisiert zwar die angezeigten Daten, springt aber nicht etwa zur obersten Zeile, sondern beh&auml;lt sowohl den markierten Eintrag als auch die Position der aktuell angezeigten Datens&auml;tze bei.<\/p>\n<p>&Uuml;brigens werden die &auml;nderungen auch gespeichert und ins Listenfeld &uuml;bernommen, wenn man w&auml;hrend der Bearbeitung eines Detaildatensatzes, aber vor dem Speichern per Listenfeld zu einem neuen Datensatz wechselt.<\/p>\n<p><b>Der richtige Zyklus<\/b><\/p>\n<p>Im Standardzustand k&ouml;nnen Sie mit der Tab- oder der Eingabetaste von Feld zu Feld springen und so auch den Datensatz wechseln, wenn Sie sich gerade auf dem letzten Feld der Aktivierreihenfolge befinden (auf dem ersten Feld der Aktivierreihenfolge bewirken Sie bei gedr&uuml;ckter Umschalttaste das Gleiche).<\/p>\n<p>Hierf&uuml;r m&uuml;ssen Sie eine Spezialbehandlung vorsehen: Entweder Sie sorgen daf&uuml;r, dass das Formular nach dem Wechseln des Datensatzes &uuml;ber die Detailansicht automatisch den nun aktiven Eintrag im Listenfeld aktiviert, oder Sie unterbinden das Springen von Datensatz zu Datensatz.<\/p>\n<p>Letzteres geht einfach: Dazu stellen Sie einfach die Eigenschaft <b>Zyklus <\/b>auf <b>Aktueller Datensatz <\/b>ein. Wenn sich die Einf&uuml;gemarke nun im letzten Steuerelement der Aktivierreihenfolge befindet und Sie die Tab- oder Eingabetaste dr&uuml;cken, springt die Einf&uuml;gemarke auf das erste Steuerelement der Aktivierreihenfolge.<\/p>\n<p>Die andere Variante beh&auml;lt die Einstellung <b>Alle Datens&auml;tze <\/b>f&uuml;r die Eigenschaft <b>Zyklus <\/b>bei und sorgt programmatisch f&uuml;r das Synchronisieren des Listenfelds beim Datensatzwechsel. Wir verwenden hier die Ereigniseigenschaft <b>Beim Anzeigen<\/b>, die bei jedem Datensatzwechsel ausgel&ouml;st wird. Die entsprechende Ereignisprozedur f&uuml;llen wir wie folgt:<\/p>\n<pre>Private Sub Form_Current()\r\n    Me!lstPersonen = Me!PersonID\r\n    End Sub<\/pre>\n<p>Dies stellt den Wert des Listenfelds auf den Prim&auml;rschl&uuml;sselwert des aktuell im Formular ausgew&auml;hlten Datensatzes ein.<\/p>\n<p><b>Listenfeld sofort aktualisieren<\/b><\/p>\n<p>Manch einer m&ouml;chte vielleicht, dass das Listenfeld direkt bei &auml;nderung der darin angezeigten Daten aktualisiert wird, also beispielsweise gleich nach Eingabe oder L&ouml;schen eines Zeichens in einem der Steuerelemente.<\/p>\n<p>Das ist schwierig, weil das Listenfeld ja genau wie das Formular auf einer Datenherkunft basiert. Das bedeutet, dass es nur ge&auml;nderte und auf die hinter der Datenherkunft stehende Tabelle &uuml;bertragene Daten anzeigt. Dazu wiederum m&uuml;sste man die &auml;nderungen sofort speichern, was nicht dem Standardverhalten von Access entspricht und gegebenenfalls Verunsicherung beim Benutzer hervorruft. Verunsicherung deshalb, weil der Datensatzmarkierer nicht wie &uuml;blich das Bearbeiten-Symbol anzeigt und dar&uuml;ber hinaus keine &auml;nderungen mehr durch Dr&uuml;cken der Escape-Taste r&uuml;ckg&auml;ngig gemacht werden k&ouml;nnen.<\/p>\n<p>Dagegen klappt Folgendes aber einwandfrei: Legen Sie f&uuml;r jedes Steuerelement, dessen Inhalt auch im Listenfeld angezeigt wird, eine Ereignisprozedur f&uuml;r das Ereignis <b>Bei &auml;nderung <\/b>an. Diese sieht wie folgt aus und speichert schlicht den aktuellen Datensatz:<\/p>\n<pre>Private Sub Vorname_Change()\r\n    Application.RunCommand acCmdSaveRecord\r\n    End Sub<\/pre>\n<p>Das Listenfeld wird bei dieser Gelegenheit gleich automatisch mit ge&auml;ndert.<\/p>\n<p>Bei genauerem Besehen f&auml;llt allerdings schnell auf, dass sich bei dieser Vorgehensweise keine Leerzeichen eingeben lassen. Der Grund daf&uuml;r ist einfach: Access speichert bei der Eingabe in Textfelder zwar f&uuml;hrende, aber keine angeh&auml;ngten Leerzeichen.<\/p>\n<p>Um dies auszuprobieren, entfernen Sie zun&auml;chst die obige Ereignisprozedur wieder oder kommentieren diese aus. Geben Sie dann einen Ausdruck f&uuml;r ein Textfeld ein, der ein paar f&uuml;hrende und ein paar angeh&auml;ngte Leerzeichen enth&auml;lt. Speichern Sie den Datensatz per Mausklick auf den Datensatzmarkierer, setzen Sie den Fokus wieder auf das soeben bearbeitete Feld und pr&uuml;fen Sie, ob die Leerzeichen noch da sind. Um es vorwegzunehmen: sie sind von Access abgeschnitten worden. Wie also gehen wir nun vor, wenn wir die Daten trotzdem sofort nach Eingabe jedes einzelnen Zeichens speichern m&ouml;chten Dies gelingt durch die folgenden Schritte:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Einstellen der Eigenschaft <b>Sichtbar <\/b>des betroffenen Feldes auf <b>Nein<\/b>.<\/li>\n<li class=\"aufz-hlung\">Erstellen eines neuen Textfeldes, das beispielsweise <b>Vorname_Temp <\/b>hei&szlig;t, und Positionieren dieses Feldes genau &uuml;ber dem Ausgangsfeld, zum Beispiel <b>Vorname<\/b>.<\/li>\n<li class=\"aufz-hlung\">F&uuml;llen des Feldes <b>Vorname_Temp <\/b>beim Anzeigen des Datensatzes mit dem Inhalt des Feldes <b>Vorname<\/b>.<\/li>\n<li class=\"aufz-hlung\">Aktualisieren von <b>Vorname<\/b>, wenn der Inhalt von <b>Vorname_Temp <\/b>ge&auml;ndert wurde, und im gleichen Zuge Speichern des Datensatzes.<\/li>\n<\/ul>\n<p>Das F&uuml;llen der relevanten <b>Temp<\/b>-Felder erledigen wir in der bereits bestehenden Ereignisprozedur, die durch das Ereignis <b>Beim Anzeigen <\/b>ausgel&ouml;st wird:<\/p>\n<pre>Private Sub Form_Current()\r\n    Me!lstPersonen = Me!PersonID\r\n    Me!Vorname_Temp = Me!Vorname\r\n    Me!Nachname_Temp = Me!Nachname\r\n    End Sub<\/pre>\n<p>Die folgende Ereignisprozedur wird bei jeder &auml;nderung des Feldinhalts der betroffenen Felder ausgel&ouml;st. Sie f&uuml;llt zun&auml;chst den Inhalt des tempor&auml;ren Felds in das eigentliche gebundene Feld und speichert dann den Datensatz, was dazu f&uuml;hrt, dass auch der Inhalt des Listenfelds angepasst wird:<\/p>\n<pre>Private Sub Vorname_Temp_Change()\r\n    Me!Vorname = Me!Vorname_Temp.Text\r\n    Application.RunCommand acCmdSaveRecord\r\n    End Sub<\/pre>\n<p>Ein erster Test zeigt jedoch, dass die Einf&uuml;gemarke nach dem Einf&uuml;gen eines jeden Zeichens an die erste Position im aktuellen Textfeld springt &#8211; also auch noch keine perfekte L&ouml;sung. Erweitern wir die Prozedur allerdings wie folgt, funktioniert auch dies:<\/p>\n<pre>Private Sub Vorname_Temp_Change()\r\n    Dim intPosVorname As Integer\r\n    intPosVorname = Me!Vorname_Temp.SelStart\r\n    Me!Vorname = Me!Vorname_Temp.Text\r\n    Application.RunCommand acCmdSaveRecord\r\n    Me!Vorname_Temp.SelStart = intPosVorname\r\n    End Sub<\/pre>\n<p>Die Prozedur speichert zun&auml;chst die Position der Einf&uuml;gemarke in der Variablen <b>intPosVorname<\/b>, f&uuml;hrt dann die Aktualisierung durch und positioniert die Einf&uuml;gemarke, die ja mittlerweile an den Anfang des Felds gesprungen ist, wieder auf der urspr&uuml;nglichen Position.<\/p>\n<p>Hier laufen wir dann allerdings wieder in das Leerzeichen-Problem, denn durch <b>Application.RunCommand acCmdSaveRecord <\/b>wird die auch die Ereignisprozedur <b>Form_Current <\/b>ausgel&ouml;st und somit <b>Vorname_Temp <\/b>wieder auf den in <b>Vorname<\/b> gespeicherten Wert gesetzt &#8211; und dieser enth&auml;lt nun einmal keine angeh&auml;ngten Leerzeichen. Mit einer kleinen Erweiterung der obigen Prozedur l&ouml;sen wir allerdings auch dieses Problem:<\/p>\n<pre>Private Sub Vorname_Temp_Change()\r\n    Dim intPosVorname As Integer\r\n    Dim strVorname As String\r\n    intPosVorname = Me!Vorname_Temp.SelStart\r\n    strVorname = Me!Vorname_Temp.Text\r\n    Me!Vorname = Me!Vorname_Temp.Text\r\n    Application.RunCommand acCmdSaveRecord\r\n    Me!Vorname_Temp = strVorname\r\n    Me!Vorname_Temp.SelStart = intPosVorname\r\n    End Sub<\/pre>\n<p>Entscheidend ist das Speichern des Inhalts des tempor&auml;ren Textfelds und das anschlie&szlig;ende Wiederherstellen des zwischengespeicherten Texts. So wird der um die Leerzeichen gek&uuml;rzte Text gleich wieder durch den mit Leerzeichen erg&auml;nzt.<\/p>\n<p><b>Datensatz l&ouml;schen<\/b><\/p>\n<p>Auch nach dem L&ouml;schen eines Datensatzes aktualisiert Access das Listenfeld automatisch &#8211; allerdings nicht ganz so, wie gew&uuml;nscht. Es ersetzt lediglich den Eintrag im Listenfeld durch den Text <b>#Gel&ouml;scht <\/b>(siehe Bild 5).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic005_opt.jpeg\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: So sieht ein gel&ouml;schter Datensatz im Listenfeld aus.<\/span><\/b><\/p>\n<p>Das geschah aber bei Experimenten auch nicht immer: Manchmal blieb der Eintrag auch stehen und andere Versuche entfernten den Listenfeldeintrag erfolgreich.<\/p>\n<p>Wir m&uuml;ssen also auch hier per Code eingreifen. Das Eigenschaftsfenster bietet f&uuml;r diesen Fall drei potenzielle Ereigniseigenschaften an: <b>Beim L&ouml;schen<\/b>, <b>Vor L&ouml;schbest&auml;tigung <\/b>und <b>Nach L&ouml;schbest&auml;tigung<\/b>. Nur <b>Nach L&ouml;schbest&auml;tigung <\/b>wird nach dem L&ouml;schen ausgel&ouml;st, was zu folgender Ereignisprozedur f&uuml;hrt:<\/p>\n<pre>Private Sub Form_AfterDelConfirm(Status As _\r\n    Integer)\r\n    Me!lstPersonen.Requery\r\n    End Sub<\/pre>\n<p>Die einzige Anweisung dieser Prozedur aktualisiert das Listenfeld mit der <b>Requery<\/b>-Methode.<\/p>\n<p>Dummerweise feuert diese Prozedur nur, wenn Sie die Option <b>Best&auml;tigen|Datensatz&auml;nderungen <\/b>im <b>Optionen<\/b>-Dialog aktiviert haben (siehe Bild 6). Und die wiederum sorgt f&uuml;r die Anzeige einer nervigen Meldung, wenn Sie Daten &auml;ndern, indem Sie beispielsweise einen Datensatz l&ouml;schen. Zum Gl&uuml;ck k&ouml;nnen Sie diese Meldung unterbinden, und zwar in einer Ereignisprozedur, die durch ein weiteres der genannten Ereignisse ausgel&ouml;st wird &#8211; n&auml;mlich <b>Vor L&ouml;schbest&auml;tigung<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2009_06\/ListenfeldUndDetails-web-images\/pic006_opt.jpeg\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Diese Option f&uuml;hrt zur Ausf&uuml;hrung verschiedener Ereignisprozeduren.<\/span><\/b><\/p>\n<p>Auch diese wird nur ausgel&ouml;st, wenn die oben erw&auml;hnte Option aktiviert ist. Wenn Sie f&uuml;r dieses Ereignis die folgende Prozedur anlegen, unterbleibt die Meldung allerdings:<\/p>\n<pre>Private Sub Form_BeforeDelConfirm(Cancel As _\r\n    Integer, Response As Integer)\r\n    Response = acDataErrContinue\r\n    End Sub<\/pre>\n<p>Mit diesen beiden Ereignissen wird das Listenfeld nun auch beim L&ouml;schen eines Datensatzes ordnungsgem&auml;&szlig; aktualisiert.<\/p>\n<p><b>Neuen Datensatz anlegen<\/b><\/p>\n<p>Auch beim Anlegen eines neuen Datensatzes soll das Listenfeld aktualisiert werden. Wenn Sie f&uuml;r das Aktualisieren des Listenfeldeintrags beim &auml;ndern eines der beteiligten Textfelder die obige Variante verwenden, bei der &auml;nderungen sofort &uuml;bertragen werden, brauchen Sie nichts weiter zu tun: Sobald Sie einen neuen Datensatz bearbeiten und dabei eines der Felder &auml;ndern, deren Inhalt auch im Listenfeld angezeigt wird, k&ouml;nnen Sie die &auml;nderungen im Listenfeld gleich mitverfolgen.<\/p>\n<p>Und auch die einfachere Variante, bei der erst nach dem Speichern des Datensatzes eine Aktualisierung des Listenfeldes erfolgen soll, funktioniert gleicherma&szlig;en f&uuml;r das &auml;ndern als auch das Anlegen eines Datensatzes.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit den hier vorgestellten Techniken haben Sie die M&ouml;glichkeit, dem Benutzer Ihrer Anwendung bei der Bearbeitung von Detaildaten ein Listenfeld zur schnellen Auswahl des Datensatzes zur Seite zu stellen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ListenfeldUndDetails.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{80F71AA2-2B47-46CB-AA45-6456634413C7}\/aiu_689.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine sch&ouml;n modular aufgebaute Benutzeroberfl&auml;che zeigt &Uuml;bersichtslisten und Detailansichten in eigenen Formularen an. Manchmal will man aber der &Uuml;bersicht halber beides in einem haben: Das Listenfeld bietet die wichtigsten Informationen zur Auswahl an und per Mausklick lassen sich die Details zum gew&uuml;nschten Datensatz direkt daneben oder darunter betrachten. Wie Sie ein solches Formular erstellen, zeigt dieser Beitrag.<\/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,66062009,44000023],"tags":[],"class_list":["post-55000689","post","type-post","status-publish","format-standard","hentry","category-662009","category-66062009","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Listenfeld und Details in einem Formular - 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\/Listenfeld_und_Details_in_einem_Formular\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Listenfeld und Details in einem Formular\" \/>\n<meta property=\"og:description\" content=\"Eine sch&ouml;n modular aufgebaute Benutzeroberfl&auml;che zeigt &Uuml;bersichtslisten und Detailansichten in eigenen Formularen an. Manchmal will man aber der &Uuml;bersicht halber beides in einem haben: Das Listenfeld bietet die wichtigsten Informationen zur Auswahl an und per Mausklick lassen sich die Details zum gew&uuml;nschten Datensatz direkt daneben oder darunter betrachten. Wie Sie ein solches Formular erstellen, zeigt dieser Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:18:17+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced\" \/>\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=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Listenfeld und Details in einem Formular\",\"datePublished\":\"2020-05-22T22:18:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/\"},\"wordCount\":2487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/6f08a0e16c844765be86ffc841c0eced\",\"articleSection\":[\"2009\",\"6\\\/2009\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/\",\"name\":\"Listenfeld und Details in einem Formular - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/6f08a0e16c844765be86ffc841c0eced\",\"datePublished\":\"2020-05-22T22:18:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/6f08a0e16c844765be86ffc841c0eced\",\"contentUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/6f08a0e16c844765be86ffc841c0eced\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Listenfeld_und_Details_in_einem_Formular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Listenfeld und Details in einem Formular\"}]},{\"@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":"Listenfeld und Details in einem Formular - 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\/Listenfeld_und_Details_in_einem_Formular\/","og_locale":"de_DE","og_type":"article","og_title":"Listenfeld und Details in einem Formular","og_description":"Eine sch&ouml;n modular aufgebaute Benutzeroberfl&auml;che zeigt &Uuml;bersichtslisten und Detailansichten in eigenen Formularen an. Manchmal will man aber der &Uuml;bersicht halber beides in einem haben: Das Listenfeld bietet die wichtigsten Informationen zur Auswahl an und per Mausklick lassen sich die Details zum gew&uuml;nschten Datensatz direkt daneben oder darunter betrachten. Wie Sie ein solches Formular erstellen, zeigt dieser Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:18:17+00:00","og_image":[{"url":"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Listenfeld und Details in einem Formular","datePublished":"2020-05-22T22:18:17+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/"},"wordCount":2487,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced","articleSection":["2009","6\/2009","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/","url":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/","name":"Listenfeld und Details in einem Formular - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced","datePublished":"2020-05-22T22:18:17+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#primaryimage","url":"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced","contentUrl":"http:\/\/vg03.met.vgwort.de\/na\/6f08a0e16c844765be86ffc841c0eced"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Listenfeld_und_Details_in_einem_Formular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Listenfeld und Details in einem Formular"}]},{"@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\/55000689","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=55000689"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000689\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}