{"id":55001460,"date":"2023-12-01T00:00:00","date_gmt":"2023-11-07T11:44:53","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1460"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/","title":{"rendered":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/ab1a124fe0c04f13b295ca32a4d717ac\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es gibt den einen oder anderen Bug in Microsoft Access, der nicht als solcher identifiziert werden kann, weil man einfach nicht herausfindet, wie man ein Fehlverhalten reproduzierbar ausl&ouml;st. Im vorliegenden Fall ist es einem unserer findigen Kollegen gelungen, einen Bug zu erkennen, der bisher nach unserer Recherche noch nicht dokumentiert wurde. Es handelt sich um einen Bug, der je nach Konstellation mal gar keine Auswirkungen hat und mal schwere Folgen mit sich bringen kann. Den Ausl&ouml;ser zu identifizieren ist auch alles andere als trivial &#8211; aber wir haben ihn gleich im Titel pr&auml;sentiert: Wenn die H&ouml;he eines Unterformulars gleich 0 wird, entl&auml;dt Access das Formular. Welche Schritte zum Nachvollziehen n&ouml;tig sind, welche Folgen dies haben kann und wie sich das Problem beheben l&auml;sst, erl&auml;utern wir in diesem Beitrag.<\/p>\n<p><b>Video passend zu diesem Artikel:<\/b><\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/bboEWM5w6a4\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/b><\/p>\n<p>Eigentlich kann das gar nicht sein, dachte sich der Access-Entwickler Stefan M. (Name von der Redaktion ge&auml;ndert). Irgendwie spielt das Formular verr&uuml;ckt: Der Timer im Unterformular funktioniert nicht mehr, Variablen werden geleert, obwohl es keinen unbehandelten Laufzeitfehler gab (Stefan M. achtet sehr auf die Behandlung von Fehlern). Zumindest hat sein Kunde dieses Verhalten geschildert &#8211; er selbst hatte keinen Schimmer, wie er das Verhalten reproduzieren sollte.<\/p>\n<p>Schlie&szlig;lich setzte er sich selbst mit dem Kunden zusammen und schaute sich an, was dieser in der Praxis mit dem Formular veranstaltet. Schlie&szlig;lich zeigte sich, dass wann immer das merkw&uuml;rdige Verhalten auftrat, der Kunde die H&ouml;he des Formulars verkleinert hatte, damit er zwar noch den Kopfbereich des Formulars sehen konnte, gleichzeitig aber genug Platz f&uuml;r andere Formulare verf&uuml;gbar war. Es musste also irgendetwas mit der H&ouml;he des Formulars zu tun haben.<\/p>\n<p>Zur&uuml;ck am eigenen Rechner setzte Stefan M. sich hin und testete die halbe Nacht. Irgendwann hatte er den Fehler identifiziert: Wann immer er das Formular so klein machte, dass der Detailbereich nicht mehr zu sehen war, wurden die Variablen geleert und die aktuelle Markierung des Datensatzes im Unterformular wurde zur&uuml;ckgesetzt. Die erste Erkenntnis war: Das Unterformular musste auf irgendeine Art entladen worden sein. Einige Experimente sp&auml;ter hatte er die Konstellation ermittelt, die zum Fehler f&uuml;hrt &#8211; wir werden diese nun nachstellen.<\/p>\n<h2>Reproduzieren des Problems<\/h2>\n<p>Ausgangspunkt ist die folgende Situation: Wir verwenden ein Haupt- und ein Unterformular. Das Unterformular befindet sich im Detailbereich des Hauptformulars. Im Hauptformular sind au&szlig;erdem Formularkopf und -fu&szlig; aktiviert. Diese Bereiche m&uuml;ssen nicht sichtbar sein, k&ouml;nnen also die H&ouml;he <b>0 <\/b>aufweisen &#8211; es reicht, dass sie aktiviert sind.<\/p>\n<p>In unserem Beispiel zeigen wir im Detailbereich und im Unterformular noch Kategorien und die darin enthaltenen Produkte an &#8211; das ist kein dekoratives Beiwerk, sondern n&ouml;tig f&uuml;r das Nachvollziehen des Beispiels (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_001.png\" alt=\"Entwurf des problembehafteten Formulars\" width=\"524,559\" height=\"438,0431\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf des problembehafteten Formulars<\/span><\/b><\/p>\n<p>Um zu zeigen, dass das Formular zu einem bestimmten Zeitpunkt entladen wird, haben wir zun&auml;chst das Ereignis <b>Beim Entladen <\/b>des Unterformulars in Form der folgenden Ereignisprozedur implementiert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Das Formular wird entladen.\"\r\n<span style=\"color:blue;\">End Sub<\/span> <\/pre>\n<p>Sobald das Formular entladen wird, sollte also diese Meldung erscheinen. Damit lie&szlig; sich schnell ermitteln, zu welchem Zeitpunkt das Formular entladen wurde &#8211; n&auml;mlich genau dann, wenn wir die H&ouml;he des Formulars so verkleinert haben, dass der Detailbereich nicht mehr sichtbar war (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_002.png\" alt=\"Der Bug tritt genau beim Erreichen der H&ouml;he 0 des Detailbereichs auf.\" width=\"524,559\" height=\"220,1195\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Der Bug tritt genau beim Erreichen der H&ouml;he 0 des Detailbereichs auf.<\/span><\/b><\/p>\n<h2>Unterformular entladen &#8211; die Folgen<\/h2>\n<p>Nachdem die Ursache gefunden war, galt es, die Folgen zu untersuchen. Hier gibt es zumindest die folgenden Probleme:<\/p>\n<ul>\n<li>Der Datensatzzeiger im Unterformular wird wieder auf den ersten Datensatz gesetzt.<\/li>\n<li>Filter im Unterformular werden gel&ouml;scht.<\/li>\n<li>Variablen, die im Klassenmodul des Unterformulars deklariert sind, werden geleert.<\/li>\n<\/ul>\n<p>Das haben wir wie folgt belegt. Der erste Teil ist der Timer. Wir haben die Eigenschaft <b>Zeitgeberintervall <\/b>auf <b>1.000 <\/b>eingestellt (die Einheit ist Millisekunden, also wird das <b>Timer<\/b>-Ereignis einmal pro Sekunde ausgel&ouml;st).<\/p>\n<p>Au&szlig;erdem haben wir f&uuml;r die Ereigniseigenschaft <b>Bei Zeitgeber <\/b>die folgende Ereignisprozedur hinterlegt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Timer()\r\n     Me.Parent.txtTimer = Now\r\n     Me.Parent.txtTest = strTest\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese schreibt bei jedem Aufruf des <b>Timer<\/b>-Ereignisses, also einmal pro Sekunde, das aktuelle Datum und die aktuelle Zeit in das Textfeld <b>txtTimer<\/b>. Au&szlig;erdem schreibt sie den Wert einer Variablen namens <b>strTest <\/b>in das Textfeld <b>txtTest<\/b>. Diese Variable deklarieren wir wie folgt im Klassenmodul des Unterformulars:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strTest<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Beim Laden des Unterformulars wollen wir die Variable <b>strTest<\/b> erstmalig f&uuml;llen und au&szlig;erdem in ein weiteres Textfeld namens <b>txtLoadUnload <\/b>den Text <b>Load <\/b>und Datum und Zeit des Ladens eintragen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     strTest = \"Wert der Variablen strTest\"\r\n     Me.Parent.txtLoadUnload = \"Load \" & Now\r\n     Me.Parent.txtTest = strTest\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit sieht der Inhalt des Formulars wie in Bild 3 aus. Das erste Textfeld enth&auml;lt den Text <b>Load &#8230;<\/b>, das zweite liefert sek&uuml;ndlich die aktuelle Zeit und das dritte wird regelm&auml;&szlig;ig mit dem Inhalt der Variablen <b>strTest <\/b>gef&uuml;llt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_003.png\" alt=\"Das Formular direkt nach dem &Ouml;ffnen\" width=\"524,559\" height=\"346,0632\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Das Formular direkt nach dem &Ouml;ffnen<\/span><\/b><\/p>\n<p>Um nun auch die Auswirkungen des Entladens des Formulars zu demonstrieren, kommentieren wir die <b>MsgBox <\/b>in der Prozedur f&uuml;r das Ereignis <b>Beim Entladen <\/b>aus und f&uuml;gen eine Anweisung hinzu, die den Text im obersten Textfeld auf <b>Unload &#8230; <\/b>&auml;ndert:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     ''<span style=\"color:blue;\">MsgBox<\/span> \"Das Formular wird entladen.\"\r\n     Me.Parent.txtLoadUnload = \"UnLoad \" & Now\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn wir nun die H&ouml;he des Detailbereichs minimieren, zeigt das oberste Textfeld sofort den Text <b>Unload &#8230; <\/b>an, was zeigt, dass die <b>Form_Unload<\/b>-Prozedur ausgel&ouml;st wurde.<\/p>\n<h2>Weitere Experimente<\/h2>\n<p>Wir sehen nun, dass das <b>Unload<\/b>-Ereignis ausgel&ouml;st wurde und somit alle Variablen geleert wurden. Weitere Ergebnisse sind:<\/p>\n<ul>\n<li>Wenn wir im Unterformular den zweiten Datensatz markieren, die H&ouml;he des Detailbereichs minimieren und diesen dann wieder vergr&ouml;&szlig;ern, ist wieder der erste Datensatz im Unterformular markiert.<\/li>\n<li>Wenn wir im Unterformular einen Filter anwenden, der beispielsweise nur den ersten Datensatz anzeigt, und den Detailbereich des Hauptformulars verkleinern und wieder vergr&ouml;&szlig;ern, ist der Filter wieder entfernt.<\/li>\n<li>Andererseits bleibt eine einmal get&auml;tigte Sortierung im Unterformular erhalten.<\/li>\n<\/ul>\n<h2>L&ouml;sungen des Problems<\/h2>\n<p>Eine L&ouml;sung dieses Problems sahen wir zun&auml;chst nicht. Selbst das Setzen des Parameters <b>Cancel <\/b>auf den Wert <b>True <\/b>im <b>Unload<\/b>-Ereignis des Unterformulars hat keinerlei Auswirkung &#8211; das Formular wird dennoch entladen.<\/p>\n<p>Die einzige M&ouml;glichkeit schien, die offensichtlichen Fehler und Probleme zu identifizieren und diese per Workaround zu beheben &#8211; also zum Beispiel Variablen in der Code behind-Klasse des Hauptformulars zu deponieren, den aktuellen Filter in einer Variablen zu speichern und wiederherzustellen, wenn das Formular entladen wurde oder auch die Position des Datensatzzeigers zu speichern und wiederherzustellen, wenn das Unterformular wieder sichtbar wird.<\/p>\n<h2>Ungew&ouml;hnliche, aber unpraktische L&ouml;sung<\/h2>\n<p>Dann erschien doch noch eine L&ouml;sung, die schlicht und einfach mit intuitiv bezeichnet werden kann &#8211; wer auf eine Erkl&auml;rung hofft, wie man solche Probleme aufdecken kann, den m&uuml;ssen wir leider entt&auml;uschen.<\/p>\n<p>Die L&ouml;sung lautet: Wir fassen das gesamte Formular plus Unterformular nochmals in ein weiteres Formular ein, das nur den Detailbereich anzeigt und keinen Kopf- oder Fu&szlig;bereich. Das hei&szlig;t: Wir erstellen ein neues Formular, das wir beispielsweise <b>frmHolder <\/b>nennen. In dieses ziehen wir das bisher verwendete Formular <b>frmKategorienProdukte <\/b>hinein. Die Gr&ouml;&szlig;e des Formulars <b>frmHolder <\/b>passen wir so an, dass das Formular <b>frmKategorienProdukte<\/b> genau hineinpasst (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_004.png\" alt=\"Das Formular wird als Unterformular zum Formular frmHolder hinzugef&uuml;gt.\" width=\"524,559\" height=\"432,4176\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Das Formular wird als Unterformular zum Formular frmHolder hinzugef&uuml;gt.<\/span><\/b><\/p>\n<p>Nun sind im Formular <b>frmHolder <\/b>noch ein paar Anpassungen zu erledigen, damit der Benutzer nicht merkt, dass er es mit einem zus&auml;tzlichen Formular zu tun hat:<\/p>\n<ul>\n<li>Eigenschaft <b>Datensatzmarkierer <\/b>auf <b>Nein <\/b>einstellen<\/li>\n<li>Eigenschaft <b>Navigationsschaltfl&auml;chen <\/b>auf <b>Nein <\/b>einstellen<\/li>\n<li>Eigenschaft <b>Bildlaufleisten <\/b>auf <b>Nein <\/b>einstellen<\/li>\n<li>Gegebenenfalls <b>Automatisch zentrieren <\/b>ebenfalls auf <b>Nein <\/b>einstellen<\/li>\n<li>Wenn Icon und\/oder Titel eingestellt waren, diese Einstellungen in <b>frmHolder <\/b>&uuml;bernehmen<\/li>\n<\/ul>\n<p>Damit erhalten wir anschlie&szlig;end das Formular aus Bild 5. Wir k&ouml;nnen dieses wie das vorherige Formular in der H&ouml;he verkleinern, nur dass diesmal nicht das Unterformular entladen wird.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_005.png\" alt=\"Das Formular im Holder-Formular funktioniert jetzt ohne den Bug.\" width=\"524,559\" height=\"428,1928\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Das Formular im Holder-Formular funktioniert jetzt ohne den Bug.<\/span><\/b><\/p>\n<p>Weitere &Auml;nderungen ergeben sich, wenn man beispielsweise das Formular mit <b>DoCmd.OpenForm <\/b>&ouml;ffnet und Parameter &uuml;bergibt &#8211; diese m&uuml;ssten dann vom aufgerufenen Formular <b>frmHolder <\/b>an das untergeordnete Formular <b>frmKategorienProdukte <\/b>weitergeleitet werden.<\/p>\n<h2>DoCmd.OpenForm-Parameter &uuml;bertragen<\/h2>\n<p>Wenn das Hauptformular pl&ouml;tzlich ein Unterformular wird, wirken sich eventuell per <b>DoCmd.OpenForm <\/b>&uuml;bergebene Parameter nicht mehr wie gewohnt aus.<\/p>\n<p>Das gilt direkt f&uuml;r den Parameter <b>WhereCondition<\/b>. Die folgende Anweisung funktioniert nat&uuml;rlich nicht wie gew&uuml;nscht, da das Formular <b>frmHolder <\/b>gar keine Datensatzquelle aufweist:<\/p>\n<pre>DoCmd.OpenForm \"frmHolder\", _\r\n     WhereCondition:=\"KategorieID = 2\"<\/pre>\n<p>Das n&auml;chste Problem ist, dass wir die &uuml;bergebene Bedingung noch nicht einmal aus dem Formular <b>frmHolder <\/b>auslesen k&ouml;nnen, um diese auf das darin enthaltenen Formular <b>frmKategorienProdukte <\/b>zu &uuml;bertragen. Die Eigenschaft <b>Filter <\/b>liefert diesen Wert n&auml;mlich nur, wenn das aufgerufene Formular eine passende Datensatzquelle enth&auml;lt &#8211; beispielsweise eine Abfrage auf Basis der Tabelle <b>tblProdukte<\/b>. Dann k&ouml;nnen wir im <b>Form_Load<\/b>-Ereignis des Formulars <b>frmHolder <\/b>den folgenden Code platzieren:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(Me.Filter) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me.frmKategorienProdukte.Form.Filter = Me.Filter\r\n         Me.frmKategorienProdukte.Form.FilterOn = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sobald wir jedoch den Parameter <b>OpenArgs <\/b>nutzen wollen, wird es komplizierter: Wir k&ouml;nnen <b>OpenArgs <\/b>dann in <b>frmHolder <\/b>auslesen und beispielsweise an eine &ouml;ffentliche Eigenschaft von <b>frmKategorienProdukte <\/b>&uuml;bergeben, aber nicht an <b>OpenArgs<\/b>, denn diese Eigenschaft ist schreibgesch&uuml;tzt. Sie kann nur beim &Ouml;ffnen per Parameter &uuml;bergeben werden.<\/p>\n<h2>Die einfachste L&ouml;sung<\/h2>\n<p>Eine weitere m&ouml;gliche L&ouml;sung des Problems ist, einfach die Elemente aus dem Formularkopf in den Detailbereich zu &uuml;bertragen und den Formularkopf- und den Formularfu&szlig;bereich &uuml;ber den entsprechenden Kontextmen&uuml;-Befehl auszublenden (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_006.png\" alt=\"Formularkopf und -fu&szlig; ausblenden\" width=\"524,559\" height=\"418,9185\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Formularkopf und -fu&szlig; ausblenden<\/span><\/b><\/p>\n<p>Das gelingt zwar nur, wenn es sich um die Ansicht <b>Einzelnes Formular <\/b>handelt. Beim Endlosformular ben&ouml;tigt man einfach manchmal Steuerelemente im Formularkopf oder -fu&szlig;, da sich die Inhalte im Detailbereich entsprechend der Anzahl der Datens&auml;tze und der H&ouml;he des verf&uuml;gbaren Platzes wiederholen.<\/p>\n<p>Allerdings ist es gar nicht m&ouml;glich, ein Unterformular im Detailbereich eines Formulars in der Endlosansicht anzuzeigen. Wenn wir versuchen, die Eigenschaft <b>Standardansicht <\/b>f&uuml;r das Hauptformular auf <b>Endlosformular <\/b>einzustellen, erscheint die Meldung aus Bild 7, die darauf hinweist, dass unter anderem Unterformulare nicht im Detailbereich von Endlosformularen verwendet werden k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_007.png\" alt=\"Fehler beim Versuch, das Formular auf die Endlosansicht umzustellen\" width=\"700\" height=\"81,51569\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Fehler beim Versuch, das Formular auf die Endlosansicht umzustellen<\/span><\/b><\/p>\n<p>Also verschieben wir einfach wie in Bild 8 die Elemente des Formularkopfes in den Detailbereich. Wenn Sie den Formularkopf genutzt haben, um eine alternative Hintergrundfarbe zu verwenden, k&ouml;nnen Sie auch einfach ein Rechteck-Steuerelement hinter den Steuerelementen platzieren, die dadurch hervorgehoben werden sollen &#8211; dazu stellen wir einfach die Eigenschaft <b>Hintergrundart <\/b>des Rechtecks auf <b>Normal <\/b>und die <b>Hintergrundfarbe <\/b>auf die gew&uuml;nschte Farbe ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_008.png\" alt=\"Verschieben der Elemente des Formularkopfes in den Detailbereich\" width=\"424,5589\" height=\"408,808\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Verschieben der Elemente des Formularkopfes in den Detailbereich<\/span><\/b><\/p>\n<p>Der Nachteil dieser L&ouml;sung ist, dass sich der Datensatzmarkierer, sofern er angezeigt wird, auch &uuml;ber den nachgebauten Formularkopf erstreckt. Das sollte jedoch kein gro&szlig;es Problem darstellen (siehe Bild 9). Daf&uuml;r kann man die Parameter beim Aufruf eines solchen Formulars ohne Einschr&auml;nkungen nutzen &#8211; und die Probleme durch den Bug fallen ohnehin weg.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_06\/pic_1460_009.png\" alt=\"Die Version ohne Formularkopf in der Formularansicht\" width=\"424,5589\" height=\"374,3422\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Die Version ohne Formularkopf in der Formularansicht<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Wir hoffen, dass wir mit dem Aufdecken dieses Bugs den einen oder anderen unerkl&auml;rlichen Fehler in Ihren Anwendungen erkl&auml;ren konnten und Sie in diesem Fall die Alternativen nutzen k&ouml;nnen. Oder tritt bei Ihnen ein anderer, nicht nachvollziehbarer Fehler auf? Dann z&ouml;gern Sie nicht und setzen Sie sich mit uns in Verbindung &#8211; vielleicht k&ouml;nnen wir eine L&ouml;sung finden. Schicken Sie einfach eine E-Mail mit der Schilderung des Problems und gegebenenfalls mit einer Beispieldatenbank an <b>info@access-im-unternehmen.de<\/b>.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>BugUnterformularWirdEntladen_Loesung.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/944BA650-B588-4002-AE0F-F689D7E2670B\/aiu_1460.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es gibt den einen oder anderen Bug in Microsoft Access, der nicht als solcher identifiziert werden kann, weil man einfach nicht herausfindet, wie man ein Fehlverhalten reproduzierbar ausl&ouml;st. Im vorliegenden Fall ist es einem unserer findigen Kollegen gelungen, einen Bug zu erkennen, der bisher nach unserer Recherche noch nicht dokumentiert wurde. Es handelt sich um einen Bug, der je nach Konstellation mal gar keine Auswirkungen hat und mal schwere Folgen mit sich bringen kann. Den Ausl&ouml;ser zu identifizieren ist auch alles andere als trivial &#8211; aber wir haben ihn gleich im Titel pr&auml;sentiert: Wenn die H&ouml;he eines Unterformulars gleich 0 wird, entl&auml;dt Access das Formular. Welche Schritte zum Nachvollziehen n&ouml;tig sind, welche Folgen dies haben kann und wie sich das Problem beheben l&auml;sst, erl&auml;utern wir in diesem 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":[662023,66062023,44000042],"tags":[],"class_list":["post-55001460","post","type-post","status-publish","format-standard","hentry","category-662023","category-66062023","category-Bugs_und_Probleme"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0 - 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\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0\" \/>\n<meta property=\"og:description\" content=\"Es gibt den einen oder anderen Bug in Microsoft Access, der nicht als solcher identifiziert werden kann, weil man einfach nicht herausfindet, wie man ein Fehlverhalten reproduzierbar ausl&ouml;st. Im vorliegenden Fall ist es einem unserer findigen Kollegen gelungen, einen Bug zu erkennen, der bisher nach unserer Recherche noch nicht dokumentiert wurde. Es handelt sich um einen Bug, der je nach Konstellation mal gar keine Auswirkungen hat und mal schwere Folgen mit sich bringen kann. Den Ausl&ouml;ser zu identifizieren ist auch alles andere als trivial - aber wir haben ihn gleich im Titel pr&auml;sentiert: Wenn die H&ouml;he eines Unterformulars gleich 0 wird, entl&auml;dt Access das Formular. Welche Schritte zum Nachvollziehen n&ouml;tig sind, welche Folgen dies haben kann und wie sich das Problem beheben l&auml;sst, erl&auml;utern wir in diesem Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-07T11:44:53+00:00\" \/>\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\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0\",\"datePublished\":\"2023-11-07T11:44:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/\"},\"wordCount\":1972,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/ab1a124fe0c04f13b295ca32a4d717ac\",\"articleSection\":[\"2023\",\"6\\\/2023\",\"Bugs und Probleme\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/\",\"name\":\"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/ab1a124fe0c04f13b295ca32a4d717ac\",\"datePublished\":\"2023-11-07T11:44:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/ab1a124fe0c04f13b295ca32a4d717ac\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/ab1a124fe0c04f13b295ca32a4d717ac\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0\"}]},{\"@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":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0 - 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\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/","og_locale":"de_DE","og_type":"article","og_title":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0","og_description":"Es gibt den einen oder anderen Bug in Microsoft Access, der nicht als solcher identifiziert werden kann, weil man einfach nicht herausfindet, wie man ein Fehlverhalten reproduzierbar ausl&ouml;st. Im vorliegenden Fall ist es einem unserer findigen Kollegen gelungen, einen Bug zu erkennen, der bisher nach unserer Recherche noch nicht dokumentiert wurde. Es handelt sich um einen Bug, der je nach Konstellation mal gar keine Auswirkungen hat und mal schwere Folgen mit sich bringen kann. Den Ausl&ouml;ser zu identifizieren ist auch alles andere als trivial - aber wir haben ihn gleich im Titel pr&auml;sentiert: Wenn die H&ouml;he eines Unterformulars gleich 0 wird, entl&auml;dt Access das Formular. Welche Schritte zum Nachvollziehen n&ouml;tig sind, welche Folgen dies haben kann und wie sich das Problem beheben l&auml;sst, erl&auml;utern wir in diesem Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-11-07T11:44:53+00:00","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\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0","datePublished":"2023-11-07T11:44:53+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/"},"wordCount":1972,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/ab1a124fe0c04f13b295ca32a4d717ac","articleSection":["2023","6\/2023","Bugs und Probleme"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/","url":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/","name":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/ab1a124fe0c04f13b295ca32a4d717ac","datePublished":"2023-11-07T11:44:53+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/ab1a124fe0c04f13b295ca32a4d717ac","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/ab1a124fe0c04f13b295ca32a4d717ac"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Bug: Unterformular entl&auml;dt bei Bereichsh&ouml;he gleich 0"}]},{"@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\/55001460","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=55001460"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001460\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}