{"id":55001131,"date":"2018-06-01T00:00:00","date_gmt":"2020-05-13T21:19:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1131"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Zeitraeume_per_Listenfeld_und_InputBox","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/","title":{"rendered":"Zeitr&auml;ume per Listenfeld und InputBox"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Die Beispieldatenbank Vereinsverwaltung erwartet an einer Stelle die Eingabe der Vereinszugeh&ouml;rigkeit. Je Mitglied kann es auch mehrere Vereinszugeh&ouml;rigkeiten geben. Diese wollen wir diesmal in einem Listenfeld darstellen und ohne Verwendung eines eigenen Detailformulars per InputBox verwalten. Dass dies gar nicht unbedingt einfacher oder schneller geht, zeigt der vorliegende Beitrag.<\/b><\/p>\n<p>Der gr&ouml;&szlig;te Aufwand bei der Verwaltung von Zeitr&auml;umen entsteht durch die &uuml;berpr&uuml;fung der eingegebenen Werte: Das Startdatum darf nicht hinter dem Enddatum liegen, die Zeitr&auml;ume der verschiedenen Datens&auml;tze d&uuml;rfen sich nicht &uuml;berlappen. In diesem Beitrag zeigen wir, wie Sie die Zeitr&auml;ume zu einem bestimmten Thema, hier die Vereinszugeh&ouml;rigkeiten von Mitgliedern zu einem Verein, in einem Listenfeld anzeigen und per <b>InputBox<\/b> verwalten wollen. Diese Zeitr&auml;ume k&ouml;nnten aber auch etwa die Besch&auml;ftigungszeiten in einem Unternehmen sein &#8211; und Sie finden sicher noch weitere Beispiele. In unserem Beispiel k&uuml;mmern wir uns um die Eintr&auml;ge der Tabelle <b>tblVereinszugehoerigkeiten<\/b>, die wie in Bild 1 mit der Tabelle <b>tblMitglieder <\/b>verkn&uuml;pft ist.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_002.png\" alt=\"Mitglieder und Vereinszugeh&ouml;rigkeiten\" width=\"424,7115\" height=\"430,0094\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Mitglieder und Vereinszugeh&ouml;rigkeiten<\/span><\/b><\/p>\n<p>Das Listenfeld <b>lstVereinszugehoerigkeiten <\/b>sowie die beiden Schaltfl&auml;chen <b>cmdNeueVereinszugehoerigkeit<\/b> und <b>cmdVereinszugehoerigkeitLoeschen <\/b>f&uuml;llen wir gleich mit Code. Ein Klick auf die Schaltfl&auml;che <b>cmdNeueVereinszugehoerigkeit<\/b> soll beispielsweise eine <b>InputBox <\/b>wie in Bild 2 anzeigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_001.png\" alt=\"Zeitr&auml;ume per InputBox eingeben\" width=\"649,559\" height=\"358,177\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Zeitr&auml;ume per InputBox eingeben<\/span><\/b><\/p>\n<p>Zuvor wollen wir jedoch noch die Daten der Tabelle <b>tblVereinszugehoerigkeiten <\/b>im Listenfeld anzeigen. Wie Sie diese Steuer-elemente anlegen, erl&auml;utern wir im Beitrag <b>Vereinsverwaltung: Formulare <\/b>(<b>www.access-im-unternehmen.de\/1134<\/b>).<\/p>\n<h2>Datensatzherkunft f&uuml;r das Listenfeld<\/h2>\n<p>Das Listenfeld soll alle Datens&auml;tze der Tabelle <b>tblVereinszugehoerigkeiten <\/b>anzeigen, die dem aktuell im Formular <b>frmMitglieddetails <\/b>angezeigten Mitglied zugeordnet sind. Au&szlig;erdem sollen die Daten aufsteigend nach dem Eintrittsdatum sortiert werden. Dies erledigen wir mit der Abfrage aus Bild 3. Diese verwendet alle Felder der Tabelle <b>tblVereinszugehoerigkeiten<\/b>, das Fremdschl&uuml;sselfeld <b>MitgliedID <\/b>wird jedoch nur als Kriterium verwendet. Damit nur die Vereinszugeh&ouml;rigkeiten zum aktuellen Mitglied erscheinen, stellen wir das Kriterium dieses Feldes auf <b>[Forms]![frmMitglieddetails]![MitgliedID] <\/b>ein. Dies f&uuml;hrt dazu, dass die Datens&auml;tze automatisch gefiltert werden. Damit das Listenfeld nur die f&uuml;r die Bearbeitung wichtigen Spalten anzeigt, stellen wir die Eigenschaft <b>Spaltenanzahl <\/b>auf <b>3 <\/b>und die Eigenschaft <b>Spaltenbreiten <\/b>auf <b>0cm;3cm;3cm <\/b>ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_003.png\" alt=\"Datensatzherkunft des Listenfeldes lstVereinszugehoerigkeiten\" width=\"649,559\" height=\"385,4632\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Datensatzherkunft des Listenfeldes lstVereinszugehoerigkeiten<\/span><\/b><\/p>\n<p>Damit erhalten wir dann, sofern schon einige Datens&auml;tze vorliegen, in der Formularansicht Daten wie etwa in Bild 4. Wenn wir dann den Datensatz im Formular wechseln, aktualisiert dies allerdings noch nicht die im Listenfeld angezeigten Daten. Dazu m&uuml;ssen wir noch die Ereignisprozedur <b>Beim Anzeigen <\/b>zum Formular hinzuf&uuml;gen und diese wie folgt erg&auml;nzen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_004.png\" alt=\"Zwei Datens&auml;tze im Listenfeld\" width=\"499,6607\" height=\"166,8018\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Zwei Datens&auml;tze im Listenfeld<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     Me!lstVereinszugehoerigkeiten.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach gelingt die Aktualisierung des Listenfeldes beim Datensatzwechsel reibungslos.<\/p>\n<h2>Hinzuf&uuml;gen eines neuen Zeitraums<\/h2>\n<p>Die durch die Schaltfl&auml;che <b>cmdNeueVereinszugehoerigkeit <\/b>ausgel&ouml;st Ereignisprozedur soll dem Benutzer die M&ouml;glichkeit geben, einen neuen Zeitraum zum aktuellen Mitglied hinzuzuf&uuml;gen (siehe Listing 1). Die Prozedur ermittelt zun&auml;chst mit einer <b>InputBox<\/b>-Anweisung das Eintrittsdatum f&uuml;r die neue Vereinszugeh&ouml;rigkeit. Dann pr&uuml;ft sie, ob die Variable, welche das Ergebnis der Funktion aufgenommen hat, eine Zeichenkette mit einer L&auml;nge gr&ouml;&szlig;er <b>0 <\/b>aufweist. Dies ist unter folgenden Bedingungen nicht der Fall: Wenn der Benutzer das Feld leer l&auml;sst und auf <b>OK <\/b>klickt oder wenn er direkt auf <b>Abbrechen <\/b>klickt &#8211; dann wird unabh&auml;ngig vom aktuell in die <b>InputBox <\/b>eingetragenen Wert eine leere Zeichenfolge zur&uuml;ckgeliefert. Sollte <b>strEintritt <\/b>nach dieser Zeile also eine Zeichenkette mit mindestens einem Zeichen enthalten, ist die folgende <b>If&#8230;Then<\/b>-Bedingung erf&uuml;llt. Eine weitere <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft dann, ob der Benutzer ein g&uuml;ltiges Datum eingegeben hat. Falls nicht, wird der <b>Else<\/b>-Teil ausgef&uuml;hrt, welcher den Benutzer darauf hinweist, dass er kein g&uuml;ltiges Eintrittsdatum eingegeben hat. Ist das Datum jedoch g&uuml;ltig, speichern wir die in den Datentyp <b>Date <\/b>konvertierte Zeichenkette in der Variablen <b>datEintritt<\/b>. Danach k&ouml;nnen wir mit der Abfrage des Austrittsdatums fortfahren. Normalerweise gehen wir davon aus, dass eine neue Vereinszugeh&ouml;rigkeit nur ein Eintrittsdatum enth&auml;lt, daher f&uuml;llen wir den Standardtext dieser <b>InputBox <\/b>mit dem Text <b>Noch aktiv.<\/b>, was wie in Bild 5 aussieht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_005.png\" alt=\"Vorbelegung f&uuml;r das Austrittsdatum\" width=\"424,7115\" height=\"175,9023\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Vorbelegung f&uuml;r das Austrittsdatum<\/span><\/b><\/p>\n<p>Nach der Eingabe des Benutzers pr&uuml;ft die folgende <b>If&#8230;Then<\/b>-Bedingung, ob sowohl die zur&uuml;ckgelieferte Zeichenkette eine L&auml;nge von mindestens einem Zeichen aufweist und der Text nicht mit dem Standardwert <b>Noch aktiv. <\/b>&uuml;bereinstimmt. Falls nicht, wird im <b>Else<\/b>-Teil der Bedingung &uuml;ber die <b>Execute<\/b>-Methode des <b>Database<\/b>-Objekts <b>db <\/b>eine <b>INSERT INTO<\/b>-Anweisung ausgef&uuml;hrt, welche einen neuen Datensatz in der Tabelle <b>tblVereinszugehoerigkeiten <\/b>anlegt und dabei die Felder <b>MitgliedID <\/b>und <b>Eintrittsdatum <\/b>mit dem Prim&auml;rschl&uuml;sselwert des aktuellen Datensatzes im Formular und dem Wert aus <b>datEintritt <\/b>f&uuml;llt. Dabei nutzen wir die Hilfsfunktion <b>SQLDatum <\/b>aus dem Modul <b>mdlTools<\/b>, um das Datum SQL-konform abzubilden (als <b>yyyy-mm-dd<\/b>). Danach aktualisieren wir die Anzeige im Listenfeld mit der <b>Requery<\/b>-Methode des Listenfeldes.<\/p>\n<p>Hat der Benutzer jedoch ein g&uuml;ltiges Austrittsdatum angegeben, weil er etwa aus statistischen Gr&uuml;nden fr&uuml;here Vereinszugeh&ouml;rigkeiten nachtragen m&ouml;chte, pr&uuml;ft die Prozedur, ob es sich bei <b>strAustritt <\/b>um ein g&uuml;ltiges Datum handelt. Auch hier erscheint im <b>Else<\/b>-Teil eine entsprechende Meldung, falls <b>strAustritt <\/b>kein g&uuml;ltiges Datum enth&auml;lt.<\/p>\n<p>Ist <b>strAustritt <\/b>ein Datum, wird es mit <b>CDate <\/b>in die <\/p>\n<p><b>Date<\/b>-Variable <b>datAustritt <\/b>&uuml;berf&uuml;hrt. Da nun beide Datumsangaben vorhanden sind, k&ouml;nnen wir noch pr&uuml;fen, ob das Eintrittsdatum gegebenenfalls hinter dem Austrittsdatum liegt und den Benutzer darauf hinweisen. Er muss den Vorgang dann erneut starten. Sind die Daten hingegen korrekt, f&uuml;gt die Prozedur den Datensatz mit einer <b>INSERT INTO<\/b>-Aktionsabfrage zur Tabelle <b>tblVereinszugehoerigkeiten <\/b>hinzu. Diesmal ber&uuml;cksichtigt sie dabei nicht nur die Felder <b>MitgliedID <\/b>und <b>Eintrittsdatum<\/b>, sondern auch noch das Feld <b>Austrittsdatum<\/b>.<\/p>\n<h2>&auml;ndern eines bestehenden Zeitraums<\/h2>\n<p>Wenn der Benutzer doppelt auf einen der vorhandenen Eintr&auml;ge klickt, l&ouml;st dies die Ereignisprozedur <b>lstVereinszugehoerigkeiten_DblClick <\/b>aus, die Sie in Listing 2 finden.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>lstVereinszugehoerigkeiten_DblClick(Cancel<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>datEintritt<span style=\"color:blue;\"> As Date<\/span>, datAustritt<span style=\"color:blue;\"> As Date<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strEintritt<span style=\"color:blue;\"> As String<\/span>, strAustritt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngVereinszugehoerigkeitID<span style=\"color:blue;\"> As Long<\/span>\r\n     lngVereinszugehoerigkeitID = Nz(Me!lstVereinszugehoerigkeiten.Column(0), 0)\r\n     <span style=\"color:blue;\">If <\/span>lngVereinszugehoerigkeitID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Sie m&uuml;ssen einen Eintrag ausw&auml;hlen.\", vbOKOnly, \"Kein Eintrag ausgew&auml;hlt.\"\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strEintritt = Nz(Me!lstVereinszugehoerigkeiten.Column(1), \"\")\r\n     strAustritt = Nz(Me!lstVereinszugehoerigkeiten.Column(2), \"\")\r\n     strEintritt = InputBox(\"Geben Sie das Eintrittsdatum an.\", \"Startdatum\", strEintritt)\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strEintritt) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span>IsDate(strEintritt)<span style=\"color:blue;\"> Then<\/span>\r\n             datEintritt = CDate(strEintritt)\r\n             strAustritt = InputBox(\"Geben Sie das Austrittsdatum an.\", \"Austrittsdatum\", strAustritt)\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strAustritt) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">If <\/span>IsDate(strAustritt)<span style=\"color:blue;\"> Then<\/span>\r\n                     datAustritt = CDate(strAustritt)\r\n                     <span style=\"color:blue;\">If <\/span>datEintritt &gt; datAustritt<span style=\"color:blue;\"> Then<\/span>\r\n                         <span style=\"color:blue;\">MsgBox<\/span> (\"Das Eintrittsdatum muss vor dem Austrittsdatum liegen. Die Eingabe wird abgebrochen.\")\r\n                         <span style=\"color:blue;\">Exit Sub<\/span>\r\n                     <span style=\"color:blue;\">Else<\/span>\r\n                         db.Execute \"UPDATE tblVereinszugehoerigkeiten SET Eintrittsdatum = \" & SQLDatum(datEintritt) _\r\n                             & \", Austrittsdatum = \" & SQLDatum(datAustritt) & \" WHERE VereinszugehoerigkeitID = \" _\r\n                             & Me!lstVereinszugehoerigkeiten, dbFailOnError\r\n                         Me!lstVereinszugehoerigkeiten.Requery\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Else<\/span>\r\n                     <span style=\"color:blue;\">MsgBox<\/span> (\"''''\" & strAustritt & \"'''' ist kein g&uuml;ltiges Austrittsdatum.\")\r\n                     <span style=\"color:blue;\">Exit Sub<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 db.Execute \"UPDATE tblVereinszugehoerigkeiten SET Eintrittsdatum = \" & SQLDatum(datEintritt) _\r\n                      & \", Austrittsdatum = NULL WHERE VereinszugehoerigkeitID = \" _\r\n                      & lngVereinszugehoerigkeitID, dbFailOnError\r\n                 Me!lstVereinszugehoerigkeiten.Requery\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> (\"''''\" & strEintritt & \"'''' ist kein g&uuml;ltiges Eintrittsdatum.\")\r\n             <span style=\"color:blue;\">Exit Sub<\/span>\r\n         End If8\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> (\"Das Eintrittsdatum kann nicht geleert werden.\")\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Bearbeiten eines vorhandenen Zeitraums<\/span><\/b><\/p>\n<p>Die Prozedur ermittelt zun&auml;chst &uuml;ber die Eigenschaft <b>Column(0) <\/b>des Listenfeld-Steuerelements den Wert des in der ersten Spalte angezeigten Feldes. Wobei &#8222;angezeigt&#8220; der falsche Begriff ist, denn wir haben die Breite dieser Spalte ja auf <b>0cm <\/b>eingestellt, wodurch die Spalte faktisch ausgeblendet wird. Der darin enthaltene Wert des Prim&auml;rschl&uuml;sselfeldes der Tabelle <b>tblVereinszugehoerigkeiten <\/b>f&uuml;r den aktuell markierten Datensatz landet jedenfalls in der Variablen <b>lngVereinszugehoerigkeitID<\/b>. Gegebenenfalls hat der Benutzer auf eine leere Stelle im Listenfeld geklickt. In diesem Fall liefert <b>Column(0) <\/b>den Wert <b>Null <\/b>zur&uuml;ck, den wir durch die Funktion <b>Nz <\/b>durch den Wert <b>0 <\/b>ersetzen. Hat <b>lngVereinszugehoerigkeitID <\/b>danach den Wert <b>0<\/b>, zeigt die Prozedur eine Meldung an, die den Benutzer darauf hinweist, dass er den Doppelklick f&uuml;r einen bestehenden Eintrag ausf&uuml;hren muss. Nun folgt ein vorbereitender Schritt f&uuml;r die Bearbeitung der bestehenden Daten: Wir speichern die in der zweiten und dritten Spalte des markierten Eintrags im Listenfeld befindlichen Werte in den Variablen <b>strEintritt <\/b>und <b>strAustritt<\/b>. Dann zeigen wir eine <b>InputBox <\/b>an, die das Eintrittsdatum abfragen soll und den Wert aus <b>strEintritt <\/b>als Standardwert nutzt (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_006.png\" alt=\"Vorbelegung f&uuml;r das Eintrittsdatum beim Bearbeiten eines Datensatzes\" width=\"599,593\" height=\"313,3008\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Vorbelegung f&uuml;r das Eintrittsdatum beim Bearbeiten eines Datensatzes<\/span><\/b><\/p>\n<p>Das Ergebnis landet schlie&szlig;lich in der Variablen <b>strEintritt <\/b>und wird auf seine Eigenschaft als Datum gepr&uuml;ft. Ist es kein Datum, erscheint wieder die im <b>Else<\/b>-Teil aufgerufene Meldung mit einem entsprechenden Hinweis, anderenfalls landet <b>strEintritt <\/b>in <b>datEintritt<\/b>. Die n&auml;chste <b>InputBox <\/b>nimmt das Austrittsdatum auf und speichert es in der Variablen <b>strAustritt<\/b>. Genau diese liefert auch den in der <b>InputBox <\/b>angezeigten Standardwert. Auch hier erfolgt wieder die Pr&uuml;fung auf ein g&uuml;ltiges Datum mit den Konsequenzen bei Fehleingabe. Ein g&uuml;ltiges Datum vorausgesetzt, pr&uuml;ft die Prozedur dann, ob <b>datEintritt <\/b>gr&ouml;&szlig;er als <b>datAustritt <\/b>ist und gibt gegebenenfalls eine Meldung aus und bricht die Prozedur ab.<\/p>\n<p>Anderenfalls schreibt eine <b>UPDATE<\/b>-Aktionsabfrage die ge&auml;nderten Werte f&uuml;r die Felder <b>Eintrittsdatum <\/b>und <b>Austrittsdatum <\/b>f&uuml;r den in <b>lngVereinszugehoerigkeitID <\/b>angegebenen Datensatz in die Tabelle <b>tblVereinszugehoerigkeiten <\/b>ein.<\/p>\n<p>Hat der Benutzer kein Austrittsdatum angegeben, kommt noch der <b>Else<\/b>-Teil der dritten verschachtelten <b>If&#8230;Then<\/b>-Bedingung zum Tragen. Hier aktualisieren wir den bearbeiteten Datensatz ebenfalls mit einer <b>UPDATE<\/b>-Aktionsabfrage, aber wir leeren das Feld <b>Austrittsdatum<\/b>, indem wir es auf den Wert <b>NULL <\/b>einstellen.<\/p>\n<h2>L&ouml;schen eines bestehenden Zeitraums<\/h2>\n<p>Nun fehlt noch das L&ouml;schen eines bestehenden Zeitraums. Dies erledigen wir mit der Schaltfl&auml;che <b>cmdVereinszugehoerigkeitenLoeschen<\/b>, welche die Ereignisprozedur aus Listing 3 ausl&ouml;st.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVereinszugehoerigkeitLoeschen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strEintritt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strAustritt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me!lstVereinszugehoerigkeiten)<span style=\"color:blue;\"> Then<\/span>\r\n         strEintritt = Nz(Me!lstVereinszugehoerigkeiten.Column(1), \"\")\r\n         strAustritt = Nz(Me!lstVereinszugehoerigkeiten.Column(2), \"\")\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strAustritt) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             strAustritt = \" bis \" & strAustritt\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         If <span style=\"color:blue;\">MsgBox<\/span>(\"Vereinszugeh&ouml;rigkeit vom \" & strEintritt & strAustritt & \" wirklich l&ouml;schen\", vbOKCancel, _\r\n                 \"L&ouml;schbest&auml;tigung\") = vbOK Then\r\n             <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n             db.Execute \"DELETE FROM tblVereinszugehoerigkeiten WHERE VereinszugehoerigkeitID = \" _\r\n                  & Me!lstVereinszugehoerigkeiten.Column(0), dbFailOnError\r\n             Me!lstVereinszugehoerigkeiten.Requery\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Kein Listeneintrag markiert.\", vbOKOnly, \"Fehlende Auswahl\"\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 3: L&ouml;schen eines Zeitraums per Mausklick<\/span><\/b><\/p>\n<p>Die Prozedur verwendet wieder die <b>String<\/b>-Variablen <b>strEintritt <\/b>und <b>strAustritt <\/b>zum Speichern der Ein- und Austrittsdaten. Sie pr&uuml;ft, ob der Benutzer vor dem Bet&auml;tigen der Schaltfl&auml;che &uuml;berhaupt einen Eintrag im Listenfeld markiert hat. Falls nicht, erscheint eine entsprechende Meldung. Ist ein Eintrag markiert, landen die Inhalte der zweiten und dritten Spalte des Listenfeldes in den beiden Variablen <b>strEintritt <\/b>und <b>strAustritt<\/b>. Nun treffen wir Vorbereitungen, um eine R&uuml;ckfrage beim Benutzer bez&uuml;glich der zu l&ouml;schenden Daten zusammenzustellen. Wenn <b>strAustritt <\/b>ein Datum enth&auml;lt, f&uuml;gen wir n&auml;mlich vorn noch die Zeichenkette <b>bis <\/b>an:<\/p>\n<pre>strAustritt = \" bis \" & strAustritt<\/pre>\n<p>Dies wirkt sich dann auf die Meldung in der folgenden <b>MsgBox<\/b>-Anweisung aus. Ist <b>strAustritt<\/b> n&auml;mlich leer, wird schlicht kein Austrittsdatum bei der R&uuml;ckfrage angegeben, anderenfalls erscheint das Austrittsdatum mit f&uuml;hrendem <b>bis<\/b> (siehe Bild 7). Best&auml;tigt der Benutzer diese mit <b>OK<\/b>, l&ouml;scht eine <b>DELETE<\/b>-Aktionsabfrage den betroffenen Datensatz aus der Tabelle und aktualisiert die Anzeige im Listenfeld.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1131_007.png\" alt=\"L&ouml;schen eines Zeitraums\" width=\"599,593\" height=\"288,7947\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: L&ouml;schen eines Zeitraums<\/span><\/b><\/p>\n<h2>Sich &uuml;berschneidende Zeitr&auml;ume<\/h2>\n<p>Fehlt noch die M&ouml;glichkeit, dass der Benutzer zwei Zeitr&auml;ume eingibt, die sich &uuml;berschneiden. In diesem Fall wollen wir kurz vor dem Speichern eines ge&auml;nderten Zeitraums oder eines neu angelegten Zeitraums in der Tabelle pr&uuml;fen, ob dieser sich gegebenenfalls mit einem bereits vorhandenen Zeitraum f&uuml;r ein Mitglied &uuml;berschneidet. F&uuml;r dieses scheinbar einfache Unterfangen ist eine relativ umfangreiche Prozedur erforderlich, die wie in Listing 4 aussieht. Die Prozedur erwartet vier Parameter, von denen einer optional ist. Die ersten beiden sind das Eintrittsdatum und das Austrittsdatum, das der Benutzer soeben eingegeben hat. Der dritte ist die ID des Mitglieds, f&uuml;r das die neue Vereinszugeh&ouml;rigkeit gespeichert werden soll. Der vierte und optionale Parameter ist der Prim&auml;rschl&uuml;sselwert eines bestehenden Eintrags in der Tabelle <b>tblVereinszugehoerigkeiten<\/b>, der nat&uuml;rlich nur dann &uuml;bergeben wird, wenn der Benutzer einen vorhandenen Datensatz bearbeitet. Die Prozedur pr&uuml;ft zun&auml;chst, ob f&uuml;r den vierten, optionalen Parameter <b>lngVereinszugehoerigkeitID <\/b>ein Wert &uuml;bergeben wurde oder ob dieser den initialen Wert <b>0 <\/b>enth&auml;lt.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>AufUeberschneidungenPruefen(datEintritt<span style=\"color:blue;\"> As Date<\/span>, datAustritt<span style=\"color:blue;\"> As Date<\/span>, lngMitgliedID<span style=\"color:blue;\"> As Long<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> lngVereinszugehoerigkeitID<span style=\"color:blue;\"> As Long<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database, rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>, bolUeberschneidung<span style=\"color:blue;\"> As Boolean<\/span>, strAustritt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">If <\/span>lngVereinszugehoerigkeitID = 0<span style=\"color:blue;\"> Then<\/span>\r\n         strSQL = \"SELECT * FROM tblVereinszugehoerigkeiten WHERE MitgliedID = \" & lngMitgliedID\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strSQL = \"Select * FROM tblVereinszugehoerigkeiten WHERE MitgliedID = \" & lngMitgliedID _\r\n             & \" AND NOT VereinszugehoerigkeitID = \" & lngVereinszugehoerigkeitID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strSQL, dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">If <\/span>datEintritt &lt;= rst!Eintrittsdatum<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">If <\/span>datAustritt &lt;= rst!Eintrittsdatum<span style=\"color:blue;\"> Then<\/span>\r\n                 bolUeberschneidung = <span style=\"color:blue;\">False<\/span>\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 bolUeberschneidung = <span style=\"color:blue;\">True<\/span>\r\n                 <span style=\"color:blue;\">Exit Do<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>If datEintritt &gt;= rst!Austrittsdatum Then\r\n             bolUeberschneidung = <span style=\"color:blue;\">False<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             bolUeberschneidung = <span style=\"color:blue;\">True<\/span>\r\n             <span style=\"color:blue;\">Exit Do<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">If <\/span>bolUeberschneidung = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span>datAustritt = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strAustritt = \"-(Ende offen)\"\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             strAustritt = \"-\" & datAustritt\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Der Zeitraum \" & datEintritt & strAustritt & \" &uuml;berschneidet sich mit dem Zeitraum \" _\r\n             & rst!Eintrittsdatum & \"-\" & rst!Austrittsdatum & \".\"\r\n         AufUeberschneidungenPruefen = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         AufUeberschneidungenPruefen = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Pr&uuml;fen auf &uuml;berschneidungen von Mitgliedszeitr&auml;umen<\/span><\/b><\/p>\n<p>Ist dieser Wert <b>0<\/b>, wurde der Parameter nicht &uuml;bergeben und die Prozedur stellt eine <b>SELECT<\/b>-Abfrage zusammen, welche alle Datens&auml;tze liefert, die zu dem aktuellen Mitglied geh&ouml;ren. Hat <b>lngVereinszugehoerigkeitID <\/b>nicht den Wert <b>0<\/b>, was der Bearbeitung eines vorhandenen Datensatzes der Tabelle <b>tblVereinszugehoerigkeiten <\/b>entspricht, wird die <b>SELECT<\/b>-Abfrage um ein zus&auml;tzliches Kriterium erweitert, welches den in Bearbeitung befindlichen Zeitraum der Vereinszugeh&ouml;rigkeit ausschlie&szlig;t. Wir wollen den bearbeiteten Zeitraum schlie&szlig;lich nicht mit dem Zeitraum im Originalzustand vergleichen.<\/p>\n<p>Nachdem wir die SQL-Anweisung zusammengestellt haben, &ouml;ffnen wir mit der <b>OpenRecordset<\/b>-Methode ein Recordset auf Basis dieser Anweisung. Danach durchlaufen wir alle Datens&auml;tze in einer <b>Do While<\/b>-Schleife. Hier beginnt nun der Abgleich der mit <b>datEintritt <\/b>und <b>datAustritt <\/b>gelieferten Zeitraums mit den bereits gespeicherten Zeitr&auml;umen dieses Mitglieds. Die erste <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft, ob <b>datEintritt <\/b>kleiner oder gleich dem gespeicherten Eintrittsdatum des aktuellen Datensatzes ist.Falls ja, untersuchen wir, ob <b>datAustritt <\/b>ebenfalls kleiner als <b>rst!Eintrittsdatum <\/b>ist. Falls beide kleiner sind, erh&auml;lt die Variable <b>bolUeberschneidung <\/b>den Wert <b>False<\/b>, falls nicht, den Wert <b>True <\/b>&#8211; in diesem Fall ist zwar <b>dat-Eintritt <\/b>kleiner als <b>rst!Eintrittsdatum<\/b>, aber <b>datAustritt <\/b>ist gr&ouml;&szlig;er &#8211; der bearbeitete Zeitraum &uuml;berschneidet sich zumindest teilweise mit dem gespeicherten Zeitraum.<\/p>\n<p>Ist im <b>ElseIf<\/b>-Teil <b>datEintritt <\/b>gr&ouml;&szlig;er oder gleich <b>rst!Austrittsdatum<\/b>, liegt der Zeitraum auf jeden Fall hinter dem gespeicherten Zeitraum. Der <b>Else<\/b>-Teil untersucht dann die &uuml;brigen F&auml;lle, die nur lauten k&ouml;nnen: <b>datEintritt <\/b>ist gr&ouml;&szlig;er als <b>rst!Eintrittsdatum <\/b>und kleiner als <b>rst!Austrittsdatum<\/b>, was bedeutet, dass sich die Zeitr&auml;ume &uuml;berschneiden.<\/p>\n<p>Auf diese Weise untersuchen wir alle gespeicherten Datens&auml;tze in der Tabelle zum aktuell angezeigten Mitglied und verlassen die <b>Do While<\/b>-Schleife sofort, wenn <b>bolUeber-schneidung <\/b>einmal den Wert <b>True <\/b>erh&auml;lt. Diesen Wert pr&uuml;fen wir im Anschluss. Hat <b>bolUeberschneidung<\/b> den Wert <b>True<\/b>, pr&uuml;fen wir noch, ob der Benutzer das Austrittsdatum festgelegt hat oder nicht. Falls nicht, schreiben wir die Zeichenkette <b>-(Ende offen) <\/b>in die Variable <b>strAustritt<\/b>, sonst das Minuszeichen und das Austrittsdatum. Schlie&szlig;lich geben wir eine entsprechende Meldung aus, die angibt, welcher Zeitraum sich mit dem bearbeiteten Zeitraum &uuml;berschneidet. Die Funktion gibt dann mit <b>AufUeberschneidungenPruefen <\/b>den entsprechenden Wert zur&uuml;ck.<\/p>\n<h2>Pr&uuml;fung auf &uuml;berschneidungen aufrufen<\/h2>\n<p>Der Aufruf dieser Funktion tragen Sie in der Prozedur <b>cmdNeueVereinszugehoerigkeit_Click <\/b>an den Stellen ein, wo die <b>INSERT INTO<\/b>-Abfrage ausgef&uuml;hrt wird (an zwei Stellen):<\/p>\n<pre>...\r\n<span style=\"color:blue;\">If <\/span>AufUeberschneidungenPruefen(datEintritt, datAustritt,  Me!MitgliedID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n     db.Execute \"INSERT INTO ...\", dbFailOnError\r\n     Me!lstVereinszugehoerigkeiten.Requery\r\n<span style=\"color:blue;\">End If<\/span>\r\n...<\/pre>\n<p>In der Prozedur <b>lstVereinszugehoerigkeiten_DblClick <\/b>ben&ouml;tigen wir nur einen Aufruf dieser Funktion:<\/p>\n<pre><span style=\"color:blue;\">If <\/span>AufUeberschneidungenPruefen(datEintritt, datAustritt,  Me.MitgliedID, lngVereinszugehoerigkeitID) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n     db.Execute \"UPDATE ...\", dbFailOnError\r\n     Me!lstVereinszugehoerigkeiten.Requery\r\n<span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Somit werden die &auml;nderungen an der Tabelle <b>tblVereinszugehoerigkeiten <\/b>nur durchgef&uuml;hrt, wenn der neue oder bearbeitete Zeitraum auch zu den vorhandenen Zeitr&auml;umen passt.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Beitrag zeigt, wie Sie Zeitr&auml;ume in einem Listenfeld anzeigen und per Doppelklick auf einen der Eintr&auml;ge oder auf eine Neu-Schaltfl&auml;che bearbeiten oder anlegen k&ouml;nnen. Auch eine L&ouml;schen-Schaltfl&auml;che steht zur Verf&uuml;gung.<\/p>\n<p>Die &auml;nderungen haben wir statt in einem Detailformular f&uuml;r die Vereinszugeh&ouml;rigkeiten diesmal mit einfachen <b>InputBox<\/b>-Anweisungen realisiert.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Vereinsverwaltung_Anonymisiert.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/4E19A573-21E9-43D9-8678-73399CA86E58\/aiu_1131.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Beispieldatenbank Vereinsverwaltung erwartet an einer Stelle die Eingabe der Vereinszugeh&ouml;rigkeit. Je Mitglied kann es auch mehrere Vereinszugeh&ouml;rigkeiten geben. Diese wollen wir diesmal in einem Listenfeld darstellen und ohne Verwendung eines eigenen Detailformulars per InputBox verwalten. Dass dies gar nicht unbedingt einfacher oder schneller geht, zeigt der vorliegende 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":[662018,66032018,44000023],"tags":[],"class_list":["post-55001131","post","type-post","status-publish","format-standard","hentry","category-662018","category-66032018","category-Mit_Formularen_arbeiten"],"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>Zeitr&auml;ume per Listenfeld und InputBox - 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\/Zeitraeume_per_Listenfeld_und_InputBox\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zeitr&auml;ume per Listenfeld und InputBox\" \/>\n<meta property=\"og:description\" content=\"Die Beispieldatenbank Vereinsverwaltung erwartet an einer Stelle die Eingabe der Vereinszugeh&ouml;rigkeit. Je Mitglied kann es auch mehrere Vereinszugeh&ouml;rigkeiten geben. Diese wollen wir diesmal in einem Listenfeld darstellen und ohne Verwendung eines eigenen Detailformulars per InputBox verwalten. Dass dies gar nicht unbedingt einfacher oder schneller geht, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:19:37+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Zeitr&auml;ume per Listenfeld und InputBox\",\"datePublished\":\"2020-05-13T21:19:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/\"},\"wordCount\":2403,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/cb5914dddfe84e329011194126fc17c6\",\"articleSection\":[\"2018\",\"3\\\/2018\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/\",\"name\":\"Zeitr&auml;ume per Listenfeld und InputBox - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/cb5914dddfe84e329011194126fc17c6\",\"datePublished\":\"2020-05-13T21:19:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/cb5914dddfe84e329011194126fc17c6\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/cb5914dddfe84e329011194126fc17c6\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Zeitraeume_per_Listenfeld_und_InputBox\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Zeitr&auml;ume per Listenfeld und InputBox\"}]},{\"@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":"Zeitr&auml;ume per Listenfeld und InputBox - 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\/Zeitraeume_per_Listenfeld_und_InputBox\/","og_locale":"de_DE","og_type":"article","og_title":"Zeitr&auml;ume per Listenfeld und InputBox","og_description":"Die Beispieldatenbank Vereinsverwaltung erwartet an einer Stelle die Eingabe der Vereinszugeh&ouml;rigkeit. Je Mitglied kann es auch mehrere Vereinszugeh&ouml;rigkeiten geben. Diese wollen wir diesmal in einem Listenfeld darstellen und ohne Verwendung eines eigenen Detailformulars per InputBox verwalten. Dass dies gar nicht unbedingt einfacher oder schneller geht, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:19:37+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Zeitr&auml;ume per Listenfeld und InputBox","datePublished":"2020-05-13T21:19:37+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/"},"wordCount":2403,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6","articleSection":["2018","3\/2018","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/","url":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/","name":"Zeitr&auml;ume per Listenfeld und InputBox - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6","datePublished":"2020-05-13T21:19:37+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/cb5914dddfe84e329011194126fc17c6"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Zeitraeume_per_Listenfeld_und_InputBox\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Zeitr&auml;ume per Listenfeld und InputBox"}]},{"@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\/55001131","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=55001131"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001131\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}