{"id":55001134,"date":"2018-06-01T00:00:00","date_gmt":"2020-05-13T21:19:55","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1134"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Vereinsverwaltung_Formulare","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/","title":{"rendered":"Vereinsverwaltung: Formulare"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>In den Beitr&auml;gen &#8222;Vereinsverwaltung: Von Excel zum Datenmodell&#8220; und &#8222;Vereinsverwaltung: Migration&#8220; haben wir uns um die Erstellung eines Datenmodells und die Migration bestehender Beispieldaten aus einer Excel-Tabelle gek&uuml;mmert. F&uuml;r die Bearbeitung der Daten aus den so erstellten und gef&uuml;llten Tabellen wollen wir nun eine Benutzeroberfl&auml;che programmieren. Der vorliegende Beitrag zeigt, wie wir die Formulare gestalten.<\/b><\/p>\n<h2>Ausgangsposition<\/h2>\n<p>In den beiden vorhergehenden Teilen dieser Beitragsreihe, n&auml;mlich <b>Vereinsverwaltung: Von Excel zum Datenmodell <\/b>(<b>www.access-im-unternehmen.de\/1106<\/b>) und <b>Vereinsverwaltung: Migration <\/b>(<b>www.access-im-unternehmen.de\/1107<\/b>) haben wir exemplarisch gezeigt, wie wir aus den vorliegenden Daten und Anforderungen ein Datenmodell f&uuml;r eine Vereinsverwaltung erstellen. Das Ergebnis finden Sie in Bild 1. Der Kern des Datenmodells ist die Tabelle <b>tblMitglieder<\/b>, um die herum wir eine Menge weiterer Tabellen angelegt haben. Diese dienen entweder als Lookup-Tabellen f&uuml;r die Fremdschl&uuml;sselfelder der Tabelle <b>tblMitglieder <\/b>oder nehmen andere Daten auf &#8211; zum Beispiel die Dauer der Vereinszugeh&ouml;rigkeit (<b>tblVereinszugehoerigkeiten<\/b>), die Altersklassen oder die Zusammenfassung von mehreren Mitgliedern zu einer Familie (<b>tblFamilienmitglieder<\/b>).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_001.png\" alt=\"Datenmodell der Vereinsverwaltung\" width=\"700\" height=\"402,1718\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datenmodell der Vereinsverwaltung<\/span><\/b><\/p>\n<h2>Vorbereiten der Feldbeschriftungen<\/h2>\n<p>Wir wollen ganz einfach mit einem Detailformular f&uuml;r die Tabelle <b>tblMitglieder <\/b>starten. Bevor wir damit beginnen, wollen wir noch die Feldbeschriftungen f&uuml;r die einzelnen Felder anpassen. Wenn wir n&auml;mlich die Felder einer Tabelle nach dem Zuweisen der Tabelle an die Eigenschaft Datenherkunft des Formulars aus der Feldliste in den Formularentwurf ziehen wollen, tr&auml;gt Access immer den Feldnamen in das automatisch angelegte Bezeichnungsfeld ein. Das hei&szlig;t, dass f&uuml;r die Anrede beispielsweise der Feldname <b>AnredeID <\/b>als Bezeichnungsfeld verwendet wird. Damit wir nicht immer die Bezeichnungsfelder anpassen m&uuml;ssen, stellen wir gleich den gew&uuml;nschten Feldnamen in der Tabellendefinition ein, und zwar wie in Bild 2. Hier legen wir beispielsweise den Wert <b>Anrede <\/b>f&uuml;r die Eigenschaft <b>Beschriftung <\/b>fest. Auf die gleiche Weise gehen wir mit den folgenden Feldern vor:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_002.png\" alt=\"Anpassen der Feldbeschriftungen\" width=\"599,593\" height=\"644,9109\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Anpassen der Feldbeschriftungen<\/span><\/b><\/p>\n<ul>\n<li><b>Strasse <\/b>wird zu <b>Stra&szlig;e<\/b><\/li>\n<li><b>RabattklasseID <\/b>wird zu <b>Rabattklasse<\/b><\/li>\n<li><b>MitgliedsnummerHauptverein <\/b>wird zu <b>Mitgliedsnr. (Hauptverein)<\/b><\/li>\n<li><b>EMail <\/b>wird zu <b>E-Mail<\/b><\/li>\n<li><b>GeschlechtID <\/b>wird zu <b>Geschlecht<\/b><\/li>\n<\/ul>\n<h2>Doppelpunkt aktivieren<\/h2>\n<p>Damit Access beim Hinzuf&uuml;gen der Felder aus der Feldliste in den Detailbereich des Formulars nicht nur die passenden Beschriftungen f&uuml;r die Bezeichnungsfelder eintr&auml;gt, sondern diese auch noch um einen Doppelpunkt erg&auml;nzt, m&uuml;ssen Sie gegebenenfalls noch einmal Hand anlegen. &ouml;ffnen Sie dazu ein neues, leeres Formular und klicken Sie auf die Schaltfl&auml;che zum Hinzuf&uuml;gen eines neuen Textfeldes (nur anklicken, noch nicht einf&uuml;gen!). Das Eigenschaftenblatt zeigt nun auf der Registerseite <b>Format<\/b> fast ganz unten die Eigenschaft <b>Mit Doppelpunkt <\/b>an. Diese stellen Sie auf den Wert <b>Ja <\/b>ein (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_003.png\" alt=\"Aktivieren der Doppelpunkte f&uuml;r Beschriftungen\" width=\"349,7625\" height=\"414,5333\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Aktivieren der Doppelpunkte f&uuml;r Beschriftungen<\/span><\/b><\/p>\n<p>Speichern Sie das Formular nun unter dem Namen <b>Normal<\/b>. Pr&uuml;fen Sie dann, ob in den Access-Optionen wie in Bild 4 diese Bezeichnung f&uuml;r die Eigenschaft <b>Formularvorlage <\/b>festgelegt ist. Wenn Sie nun neue Formulare anlegen, ber&uuml;cksichtigen diese die Einstellungen, die wir hier f&uuml;r den Steuerelementtyp <b>Textfeld <\/b>vorgenommen haben.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_004.png\" alt=\"Bezeichnungen der Vorlagen f&uuml;r Formulare und Berichte\" width=\"599,593\" height=\"225,7396\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Bezeichnungen der Vorlagen f&uuml;r Formulare und Berichte<\/span><\/b><\/p>\n<h2>Formular f&uuml;r die Mitglieder anlegen<\/h2>\n<p>Nun legen wir ein neues, leeres Formular an und stellen seine Eigenschaft <b>Datenherkunft <\/b>auf die Tabelle <b>tblMitglieder <\/b>ein. Speichern Sie das Formular vorsichtshalber gleich unter dem Namen <b>frmMitglieddetails<\/b>. Nun aktivieren Sie die Feldliste mit dem Ribbon-Befehl <b>Entwurf|Tools|Vorhandene Felder hinzuf&uuml;gen<\/b>. Markieren Sie alle Eintr&auml;ge des Fensters <b>Feldliste <\/b>und ziehen Sie diese in den Detailbereich des Formularentwurfs (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_005.png\" alt=\"Hinzuf&uuml;gen der Felder zum Formular frmMitglieddetails\" width=\"549,6265\" height=\"527,5055\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Hinzuf&uuml;gen der Felder zum Formular frmMitglieddetails<\/span><\/b><\/p>\n<p>Hier tragen unsere Vorbereitungen nun Fr&uuml;chte: Sowohl die Beschriftungen der Bezeichnungsfelder entsprechen den von uns angegebenen Werten als auch die Doppelpunkte wurden wir gew&uuml;nscht hinzugef&uuml;gt.<\/p>\n<h2>Daten aus weiteren Tabellen hinzuf&uuml;gen<\/h2>\n<p>Bevor wir die bisher hinzugef&uuml;gten Steuer-elemente in sinnvollen Gruppen anordnen, schauen wir uns noch an, welche Daten aus den anderen Tabellen wir noch ben&ouml;tigen:<\/p>\n<ul>\n<li><b>tblFamilienmitglieder<\/b>: Wir k&ouml;nnten in einem Unterformular die &uuml;brigen Familienmitglieder anzeigen, sofern diese vorhanden sind.<\/li>\n<li><b>tblVereinszugehoerigkeiten<\/b>: Die Vereinszugeh&ouml;rigkeiten sollten auf jeden Fall in einem Unterformular angezeigt werden.<\/li>\n<li><b>tblMitgliederMannschaften<\/b>\/<b>tblMannschaften<\/b>: Auch die Zugeh&ouml;rigkeiten zu einer oder mehrerer Mannschaften k&ouml;nnte man in diesem Formular dokumentieren und auch bearbeiten.<\/li>\n<li><b>tblAnreden<\/b>, <b>tblRabattklassen<\/b>, <b>tblGeschlecht<\/b>: Die Werte dieser Felder werden bereits &uuml;ber Nachschlagefelder dargestellt.<\/li>\n<\/ul>\n<p>Bei den Daten der Tabellen <b>tblFamilienmitglieder<\/b>, <b>tblVereinszugehoerigkeiten <\/b>und <b>tblMitgliederMannschaften <\/b>k&ouml;nnen wir festlegen, auf welche Art wir die Daten anzeigen wollen. Wir wollen in dieser Beispiell&ouml;sung ein paar verschiedene Ans&auml;tze demonstrieren, aber die Ergonomie soll auch nicht zu kurz kommen. Schauen wir uns die Tabellen im Detail an.<\/p>\n<h2>Bearbeiten der Vereinszugeh&ouml;rigkeiten<\/h2>\n<p>Die Vereinszugeh&ouml;rigkeiten sind die einfachste Darstellung. Es handelt sich ja einfach nur um eine 1:n-Beziehung, wobei jedes Mitglied eine oder mehrere Vereinszugeh&ouml;rigkeiten aufweisen kann. Da es vermutlich nicht allzuoft geschieht, dass ein Mitglied den Verein verl&auml;sst und dann zur&uuml;ckkehrt, wollen wir diese Daten in einem Listenfeld anzeigen, dessen Eintr&auml;ge wir &uuml;ber einen Doppelklick bearbeiten k&ouml;nnen beziehungsweise durch entsprechende Schaltfl&auml;chen neue Vereinszugeh&ouml;rigkeiten anlegen oder l&ouml;schen k&ouml;nnen.<\/p>\n<p>An dieser Stelle f&auml;llt auf, dass wir die Eintritts- und Austrittsdaten noch gar nicht aus der Excel-Tabelle in das neue Datenmodell &uuml;bernommen haben. Das holen wir nun noch nach. Dabei unterst&uuml;tzt uns die Funktion <b>Eintrittsdatum <\/b>aus Listing 1. Diese &ouml;ffnet zun&auml;chst ein Recordset auf Basis der Tabelle mit den aus der Excel-Datei importierten Mitgliedsdaten namens <b>Mitglieder<\/b>. In einer <b>Do While<\/b>-Schleife durchl&auml;uft sie alle Datens&auml;tze dieser Tabelle und ermittelt dabei zun&auml;chst den Wert des Prim&auml;rschl&uuml;sselfeldes <b>MitgliedID <\/b>der Tabelle <b>tblMitglieder<\/b>, unter der das Mitglied importiert wurde. Um den entsprechenden Datensatz zu ermitteln, nutzen wir die <b>DLookup<\/b>-Funktion und suchen in der Tabelle <b>tblMitglieder<\/b> nach dem Datensatz, in dessen Feld <b>Mitgliedsnummer <\/b>der Wert gespeichert ist, den wir in der Excel-Datei in der Spalte <b>Mitgl-Nr <\/b>finden. Wenn wider Erwarten kein passender Datensatz gefunden wird, erh&auml;lt <b>lngMitgliedID <\/b>den Wert <b>0 <\/b>und die Anweisungen innerhalb der folgenden <b>If&#8230;Then<\/b>-Bedingung werden nicht ausgef&uuml;hrt. Stattdessen gibt die Routine eine entsprechende Meldung im Direktbereich des VBA-Editors aus.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Eintrittsdatum()\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>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngMitgliedID<span style=\"color:blue;\"> As Long<\/span>\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>strAustritt<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM Mitglieder\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         lngMitgliedID = Nz(DLookup(\"MitgliedID\", \"tblMitglieder\", \"Mitgliedsnummer = ''''\" & rst![Mitgl-Nr] & \"''''\"), 0)\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> lngMitgliedID = 0<span style=\"color:blue;\"> Then<\/span>\r\n             datEintritt = rst!Eintrittsdatum\r\n             strAustritt = Nz(rst!Bemerkung, \"\")\r\n             datAustritt = 0\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">InStr<\/span>(1, strAustritt, \"abg.\") &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                 strAustritt = <span style=\"color:blue;\">Replace<\/span>(strAustritt, \"abg.\", \"\")\r\n                 strAustritt = <span style=\"color:blue;\">Trim<\/span>(strAustritt)\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;\">Else<\/span>\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> \"Austrittsdatum aus ''''\" & rst!Bemerkung & \"'''' konnte nicht ermittelt werden.\"\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">InStr<\/span>(1, strAustritt, \"gest.\") &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                 strAustritt = <span style=\"color:blue;\">Replace<\/span>(strAustritt, \"gest.\", \"\")\r\n                 strAustritt = <span style=\"color:blue;\">Replace<\/span>(strAustritt, \"am\", \"\")\r\n                 strAustritt = <span style=\"color:blue;\">Trim<\/span>(strAustritt)\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;\">Else<\/span>\r\n                     <span style=\"color:blue;\">Debug.Print<\/span> \"Austrittsdatum aus ''''\" & rst!Bemerkung & \"'''' konnte nicht ermittelt werden.\"\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">If <\/span>datAustritt &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n                 db.Execute \"INSERT INTO tblVereinszugehoerigkeiten(MitgliedID, Eintrittsdatum, Austrittsdatum) \" _\r\n                     & \"VALUES(\" & lngMitgliedID & \", \" & SQLDatum(datEintritt) & \", \" & SQLDatum(datAustritt) & \")\", _\r\n                     dbFailOnError\r\n             <span style=\"color:blue;\">Else<\/span>\r\n                 db.Execute \"INSERT INTO tblVereinszugehoerigkeiten(MitgliedID, Eintrittsdatum) VALUES(\" _\r\n                     & lngMitgliedID & \", \" & SQLDatum(datEintritt) & \")\", dbFailOnError\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Else<\/span>\r\n             <span style=\"color:blue;\">Debug.Print<\/span> \"Mitglied mit Mitgliedsnummer ''''\" & rst![Mitgl-Nr] & \"'''' nicht gefunden.\"\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;\">End Function<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Prozedur zum Ermitteln der Eintritts- und Austrittsdaten<\/span><\/b><\/p>\n<p>Wurde das Mitglied jedoch gefunden, ermittelt die Prozedur den Wert der Spalte <b>Eintrittsdatum <\/b>und speichert diesen in der Variablen <b>datEintrittsdatum<\/b>. W&auml;hrend diese Spalte konsistent mit Datumswerten gef&uuml;llt war, m&uuml;ssen wir das eventuell vorhandene Austrittsdatum m&uuml;hsam aus der Spalte <b>Bemerkungen <\/b>ermitteln. Dazu schreiben wir den Inhalt dieser Spalte in die Variable <b>strAustritt<\/b>. Es gibt in der Excel-Datei zwei Varianten von Austrittsdaten. Hat sich ein Mitglied abgemeldet, findet sich ein Eintrag wie &#8222;1.1.2018 abg.&#8220;, wenn ein Mitglied verstorben ist, ein Eintrag wie &#8222;am 1.1.2018 gest.&#8220;.<\/p>\n<p>Wir bearbeiten beide F&auml;lle in jeweils einer <b>If&#8230;Then<\/b>-Bedingung. Die erste pr&uuml;ft, ob <b>strAustritt <\/b>die Zeichenfolge <b>abg.<\/b> enth&auml;lt. Falls ja, ersetzen wir mit der <b>Replace<\/b>-Methode die Zeichenfolge <b>abg. <\/b>durch eine leere Zeichenfolge und speichern das Ergebnis wieder in <b>strAustritt<\/b>. Anschlie&szlig;end entfernen wir alle f&uuml;hrenden und folgenden Leerzeichen mit der <b>Trim<\/b>-Funktion. Die folgende <b>If&#8230;Then<\/b>-Bedingung pr&uuml;ft mit der <b>IsDate<\/b>-Funktion, ob <b>strAustritt <\/b>nun ein g&uuml;ltiges Datum enth&auml;lt. Falls ja, landet dieser Wert nach Konvertierung mit <b>CDate <\/b>in der Variablen <b>datAustritt<\/b>, falls nicht, erscheint wieder eine entsprechende Meldung im VBA-Direktbereich.<\/p>\n<p>Auf &auml;hnliche Weise k&uuml;mmern wir uns dann um verstorbene Mitglieder. Hier ersetzen wir allerdings die beiden Zeichenketten <b>gest. <\/b>und <b>am <\/b>durch leere Zeichenketten und verarbeiten die verbleibende Zeichenkette wie zuvor beschrieben.<\/p>\n<p>Anschlie&szlig;end folgen je nach Inhalt von <b>datAustritt <\/b>zwei verschiedene SQL-Anf&uuml;geabfragen. Enth&auml;lt die Variable <b>datAustritt <\/b>einen Wert gr&ouml;&szlig;er <b>0<\/b>, was einem g&uuml;ltigen Datum entspricht, dann f&uuml;hren wir die erste <b>INSERT INTO<\/b>-Abfrage aus. Diese legt einen neuen Datensatz in der Tabelle <b>tblVereinszugehoerigkeiten <\/b>an und tr&auml;gt die ermittelten Werte f&uuml;r die Felder <b>MitgliedID<\/b>, <b>Eintrittsdatum <\/b>und <b>Austrittsdatum <\/b>ein. Sollte <b>datAustritt <\/b>keinen Wert enthalten, soll das Feld <b>Austrittsdatum <\/b>leer bleiben &#8211; in diesem Fall verwenden wir die <b>INSERT INTO<\/b>-Anweisung aus dem <b>Else<\/b>-Teil der Bedingung und tragen nur die beiden Werte <b>MitgliedID <\/b>und <b>Eintrittsdatum <\/b>in die Tabelle ein. Das Ergebnis in der Tabelle <b>tblVereinszugehoerigkeiten<\/b> sieht dann wie in Bild 6 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_006.png\" alt=\"Vereinszugeh&ouml;rigkeiten nach dem Import\" width=\"499,6607\" height=\"291,7866\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Vereinszugeh&ouml;rigkeiten nach dem Import<\/span><\/b><\/p>\n<h2>Listenfeld f&uuml;r die Vereinszugeh&ouml;rigkeiten<\/h2>\n<p>Damit k&ouml;nnen wir nun das Listenfeld namens <b>lstVereinszugehoerigkeiten <\/b>zum Formular <b>frmMitglieder <\/b>hinzuf&uuml;gen, mit dem wir die Vereinszugeh&ouml;rigkeiten dokumentieren wollen. Diese platzieren wir zun&auml;chst an einer beliebigen freien Stelle im Formular, das Finetuning nehmen wir sp&auml;ter vor. Au&szlig;erdem f&uuml;gen wir zwei Schaltfl&auml;chen namens <b>cmdNeueVereinszugehoerigkeit <\/b>und <b>cmdVereinszugehoerigkeitLoeschen <\/b>hinzu.<\/p>\n<p>Damit diese nicht allzu viel Platz wegnehmen, erhalten sie keinen Text, sondern Icons. Diese wiesen wir etwa unter Access 2016 zu, indem wir in der Entwurfsansicht des Formulars die Schaltfl&auml;che markieren, im Ribbon den Befehl <b>Entwurf|Steuerelemente|Bild einf&uuml;gen|Durchsuchen&#8230; <\/b>anklicken und das gew&uuml;nschte Bild ausw&auml;hlen. Das f&auml;llt nat&uuml;rlich leichter, wenn Sie eine Icon-Sammlung besitzen.<\/p>\n<p>Nach dem Zuweisen eines Icons stellen Sie noch die Eigenschaft <b>Hintergrundart <\/b>auf <b>Transparent <\/b>ein. Au&szlig;erdem passen Sie die Gr&ouml;&szlig;e der Schaltfl&auml;chen noch so an, dass diese etwa der Gr&ouml;&szlig;e des Icons entspricht. Das Formular sieht im Entwurf dann etwa wie in Bild 7 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_007.png\" alt=\"Listenfeld f&uuml;r die Vereinszugeh&ouml;rigkeiten plus Schaltfl&auml;chen\" width=\"649,559\" height=\"266,8882\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Listenfeld f&uuml;r die Vereinszugeh&ouml;rigkeiten plus Schaltfl&auml;chen<\/span><\/b><\/p>\n<p>Nun fehlen noch die Funktionen. Wir wollen das Bearbeiten der aktuellen Vereinszugeh&ouml;rigkeit &uuml;ber einen Doppelklick auf den entsprechenden Eintrag erm&ouml;glichen, also legen wir den Wert <b>[Ereignisprozedur] <\/b>f&uuml;r die Eigenschaft <b>Beim Doppelklicken <\/b>des Listenfeldes fest.<\/p>\n<p>F&uuml;r die beiden Schaltfl&auml;chen erstellen wir jeweils Ereignisprozeduren f&uuml;r das Ereignis <b>Beim Klicken<\/b>. Wie aber bearbeiten wir die Eintritts- und Austrittsdaten Zeigen wir den aktuellen Datensatz in einem eigenen Formular an<\/p>\n<p>Nein, wir machen es uns ein wenig leichter und lassen den Benutzer die einzigen beiden gefragten Werte per <b>InputBox <\/b>eingeben. Die Details hierzu finden Sie im Beitrag <b>Zeitr&auml;ume per Listenfeld und InputBox <\/b>(<b>www.access-im-unternehmen.de\/1131<\/b>).<\/p>\n<h2>Bearbeiten der Zuordnung zu den Mannschaften<\/h2>\n<p>Die Zuordnung von Mitgliedern zu Mannschaften ist eine wichtige Funktion, um einen &uuml;berblick dar&uuml;ber zu erhalten, wie viele Spieler man pro Mannschaft zur Verf&uuml;gung hat und ob man gegebenenfalls eine zweite Mannschaft aufstellen kann.<\/p>\n<p>F&uuml;r unser Beispiel haben wir in der Tabelle <b>tblAltersklassen <\/b>die Altersklassen definiert, die Mitglieder weisen &uuml;ber die Eigenschaften <b>GeschlechtID <\/b>und <b>Geburtsdatum <\/b>die Informationen aus, die f&uuml;r die Zuteilung in eine Altersklasse wichtig sind. Wir bauen uns eine kleine VBA-Prozedur, welche die Tabelle <b>tblMannschaften <\/b>und <b>tblMitgliederMannschaften <\/b>f&uuml;llt. Dabei soll automatisch erstmal je eine Mannschaft je Altersklasse erstellt werden, danach weisen wir &uuml;ber die Tabelle <b>tblMitgliederMannschaften <\/b>die Mitglieder den Mannschaften zu. Die von den folgenden Ausf&uuml;hrungen betroffenen Tabellen finden Sie in Bild 8: <b>tblMitglieder<\/b>, <b>tblMitgliederMannschaften<\/b>, <b>tblMannschaften<\/b>, <b>tblAltersklassen <\/b>und <b>tblGeschlecht<\/b>. Hinzu kommt noch die Tabelle <b>tblOptionen<\/b>, deren Feld <b>Stichtag <\/b>das Datum f&uuml;r die Berechnung des f&uuml;r die aktuelle Spielzeit ben&ouml;tigten Alters liefert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_008.png\" alt=\"Tabellen, welche die Zuordnung zu den Mannschaften betreffen\" width=\"649,559\" height=\"410,291\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Tabellen, welche die Zuordnung zu den Mannschaften betreffen<\/span><\/b><\/p>\n<h2>Initiale Zusammenstellung der Mannschaften<\/h2>\n<p>Wir haben bereits beim Import der Daten aus der Excel-Tabelle fast alle relevanten Informationen zusammengetragen: das Alter und das Geschlecht der Mitglieder sowie den Status (Aktiv\/Passiv), den Stichtag f&uuml;r die Altersklassen sowie die Festlegung von Altersklassen. Daraus wollen wir nun automatisiert die Mannschaften initial zusammenstellen. Hier muss ohnehin nachgearbeitet werden &#8211; in der einen Altersklasse gibt es vielleicht so viele Spieler, dass eine zweite Mannschaft angelegt wird, in der anderen so wenige, dass die Spieler in einer h&ouml;heren Altersklasse antreten m&uuml;ssen.<\/p>\n<p>Die Prozedur finden Sie im Modul <b>mdlMigration<\/b> und in Listing 2. Sie ermittelt zun&auml;chst ein Recordset mit allen Eintr&auml;gen der Tabelle <b>tblMitglieder<\/b>, deren Feld <b>Aktiv <\/b>den Wert <b>True <\/b>enth&auml;lt, die also nicht als passive Mitglieder deklariert sind. Au&szlig;erdem ermitteln wir aus der Tabelle <b>tblOptionen <\/b>den Stichtag, als das Datum, an dem das Alter der Mitglieder in Jahren f&uuml;r die laufende Saison berechnet wird. Die beiden <b>Execute<\/b>-Methoden rufen zwei <b>DELETE<\/b>-Aktionsabfragen auf, welche die beiden Tabellen <b>tblMannschaften <\/b>und <b>tblMitgliederMannschaften <\/b>leeren. Dann beginnen wir mit dem Durchlaufen der Datens&auml;tze des Recordsets <b>rst<\/b>. Im ersten Schritt ermitteln wir das aktuelle Alter des Mitglieds basierend auf dem zuvor eingelesenen Stichtag und speichern dieses in der Variablen <b>intAlter<\/b>. Dann ermitteln wir mit einer <b>DLookup<\/b>-Abfrage die Altersklasse gem&auml;&szlig; dem Alter und dem Geschlecht des Mitglieds aus der Tabelle <b>tblAltersklassen <\/b>und tragen den entsprechenden Prim&auml;rschl&uuml;sselwert in die Variable <b>lngAltersklasseID <\/b>ein. Dann pr&uuml;fen wir mit einem weiteren <b>DLookup<\/b>-Aufruf, ob es in der Tabelle <b>tblMannschaften <\/b>bereits einen Datensatz f&uuml;r diese Altersklasse gibt. Falls ja, wird der Prim&auml;rschl&uuml;sselwert des entsprechenden Datensatzes der Tabelle <b>tblMannschaften <\/b>in der Variablen <b>lngMannschaftID <\/b>gespeichert. Ist <b>lngMannschaftID <\/b>danach <b>0<\/b>, ermitteln wir die Bezeichnung der Altersklasse aus der Tabelle <b>tblAltersklassen <\/b>und speichern diese in der Variablen <b>strAltersklasse<\/b>. Wir legen einen neuen Datensatz in der Tabelle <b>tblMannschaften <\/b>mit der Bezeichnung aus <b>strAltersklasse <\/b>und dem Prim&auml;rschl&uuml;sselwert dieser Altersklasse an und ermitteln danach den Wert des Prim&auml;rschl&uuml;sselfeldes des neuen Datensatzes der Tabelle <b>tblMannschaften<\/b>. Dieser landet in der Variablen <b>lngMannschaftID<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Mannschaften()\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>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>lngAltersklasseID<span style=\"color:blue;\"> As Long<\/span>, intAlter<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>datStichtag<span style=\"color:blue;\"> As Date<\/span>, lngMannschaftID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strAltersklasse<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblMitglieder WHERE Aktiv = True\", dbOpenDynaset)\r\n     datStichtag = DLookup(\"Stichtag\", \"tblOptionen\")\r\n     db.Execute \"DELETE FROM tblMitgliederMannschaften\", dbFailOnError\r\n     db.Execute \"DELETE FROM tblMannschaften\", dbFailOnError\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         intAlter = DateDiff(\"yyyy\", rst!Geburtsdatum, datStichtag)\r\n         lngAltersklasseID = DLookup(\"AltersklasseID\", \"tblAltersklassen\", \"GeschlechtID = \" & rst!GeschlechtID _\r\n             & \" AND Mindestalter &lt;= \" & intAlter & \" AND Hoechstalter &gt;= \" & intAlter)\r\n         lngMannschaftID = Nz(DLookup(\"MannschaftID\", \"tblMannschaften\", \"AltersklasseID = \" & lngAltersklasseID), 0)\r\n         <span style=\"color:blue;\">If <\/span>lngMannschaftID = 0<span style=\"color:blue;\"> Then<\/span>\r\n             strAltersklasse = DLookup(\"Altersklasse\", \"tblAltersklassen\", \"AltersklasseID = \" & lngAltersklasseID)\r\n             db.Execute \"INSERT INTO tblMannschaften(Mannschaft, AltersklasseID) VALUES(''''\" & strAltersklasse & \"'''', \" _\r\n                 & lngAltersklasseID & \")\", dbFailOnError\r\n             lngMannschaftID = db.OpenRecordset(\"SELECT @@IDENTITY\").Fields(0)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n         db.Execute \"INSERT INTO tblMitgliederMannschaften(MitgliedID, MannschaftID) VALUES(\" & rst!MitgliedID & \", \" _\r\n             & lngMannschaftID & \")\", dbFailOnError\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Prozedur zum Zuordnung der Mitglieder zu den Mannschaften<\/span><\/b><\/p>\n<p>Mit diesen Informationen k&ouml;nnen wir nun endlich den Eintrag in der Tabelle <b>tblMitgliederMannschaften <\/b>vornehmen, der die Zuordnung der Mitglieder zu den Mannschaften enth&auml;lt. Die beiden Tabellen <b>tblMannschaften <\/b>und <b>tblMitgliederMannschaften<\/b> enthalten nun die Daten wie in Bild 9.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_009.png\" alt=\"Mannschaften und Zuordnungen\" width=\"649,559\" height=\"380,8658\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Mannschaften und Zuordnungen<\/span><\/b><\/p>\n<h2>Unterformular f&uuml;r die Mannschaften eines Mitglieds<\/h2>\n<p>Um die Mannschaften eines Mitglieds im Formular <b>frmMitglieddetails <\/b>anzuzeigen, erstellen wir ein Unterformular namens <b>sfmMitglieddetailsMannschaften<\/b>, das die Tabelle <b>tblMitgliederMannschaften <\/b>als Datenherkunft verwendet und daraus das Feld <b>MannschaftID <\/b>im Detailbereich anzeigt.<\/p>\n<p>Die Eigenschaft <b>Standardansicht <\/b>stellen wir auf <b>Datenblatt <\/b>ein. Wenn Sie dann das Unterformular schlie&szlig;en und es in den Detailbereich des Entwurfs des Formulars<b> frmMitglieddetails <\/b>ziehen, sieht das Ergebnis wie in Bild 10 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_010.png\" alt=\"Mannschaften eines Mitglieds\" width=\"649,559\" height=\"376,5142\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Mannschaften eines Mitglieds<\/span><\/b><\/p>\n<p>In der Formularansicht k&ouml;nnen Sie dann die aktuell zugewiesene Mannschaft betrachten, &auml;ndern oder neue Mannschaften hinzuf&uuml;gen (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_03\/pic_1134_011.png\" alt=\"Mannschaften eines Mitglieds in der Formularansicht\" width=\"599,593\" height=\"311,3448\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Mannschaften eines Mitglieds in der Formularansicht<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Das war der erste Teil der Beschreibung der Formulare der Vereinsverwaltung. Im folgenden Teil werden wir unter anderem das Formular <b>frmMitglieddetails <\/b>weiter ausbauen und ein &uuml;bersichtsformular zur Auswahl der Mitglieder liefern.<\/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\/782E58F0-0279-404F-888F-F8364E4E8013\/aiu_1134.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den Beitr&auml;gen &#8222;Vereinsverwaltung: Von Excel zum Datenmodell&#8220; und &#8222;Vereinsverwaltung: Migration&#8220; haben wir uns um die Erstellung eines Datenmodells und die Migration bestehender Beispieldaten aus einer Excel-Tabelle gek&uuml;mmert. F&uuml;r die Bearbeitung der Daten aus den so erstellten und gef&uuml;llten Tabellen wollen wir nun eine Benutzeroberfl&auml;che programmieren. Der vorliegende Beitrag zeigt, wie wir die Formulare gestalten.<\/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,44000027],"tags":[],"class_list":["post-55001134","post","type-post","status-publish","format-standard","hentry","category-662018","category-66032018","category-Loesungen"],"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>Vereinsverwaltung: Formulare - 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\/Vereinsverwaltung_Formulare\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vereinsverwaltung: Formulare\" \/>\n<meta property=\"og:description\" content=\"In den Beitr&auml;gen &quot;Vereinsverwaltung: Von Excel zum Datenmodell&quot; und &quot;Vereinsverwaltung: Migration&quot; haben wir uns um die Erstellung eines Datenmodells und die Migration bestehender Beispieldaten aus einer Excel-Tabelle gek&uuml;mmert. F&uuml;r die Bearbeitung der Daten aus den so erstellten und gef&uuml;llten Tabellen wollen wir nun eine Benutzeroberfl&auml;che programmieren. Der vorliegende Beitrag zeigt, wie wir die Formulare gestalten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:19:55+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568\" \/>\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=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Vereinsverwaltung: Formulare\",\"datePublished\":\"2020-05-13T21:19:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/\"},\"wordCount\":2486,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/28ce6144b6524aabb96d88cc18080568\",\"articleSection\":[\"2018\",\"3\\\/2018\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/\",\"name\":\"Vereinsverwaltung: Formulare - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/28ce6144b6524aabb96d88cc18080568\",\"datePublished\":\"2020-05-13T21:19:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/28ce6144b6524aabb96d88cc18080568\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/28ce6144b6524aabb96d88cc18080568\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Formulare\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vereinsverwaltung: Formulare\"}]},{\"@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":"Vereinsverwaltung: Formulare - 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\/Vereinsverwaltung_Formulare\/","og_locale":"de_DE","og_type":"article","og_title":"Vereinsverwaltung: Formulare","og_description":"In den Beitr&auml;gen \"Vereinsverwaltung: Von Excel zum Datenmodell\" und \"Vereinsverwaltung: Migration\" haben wir uns um die Erstellung eines Datenmodells und die Migration bestehender Beispieldaten aus einer Excel-Tabelle gek&uuml;mmert. F&uuml;r die Bearbeitung der Daten aus den so erstellten und gef&uuml;llten Tabellen wollen wir nun eine Benutzeroberfl&auml;che programmieren. Der vorliegende Beitrag zeigt, wie wir die Formulare gestalten.","og_url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:19:55+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Vereinsverwaltung: Formulare","datePublished":"2020-05-13T21:19:55+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/"},"wordCount":2486,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568","articleSection":["2018","3\/2018","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/","url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/","name":"Vereinsverwaltung: Formulare - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568","datePublished":"2020-05-13T21:19:55+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/28ce6144b6524aabb96d88cc18080568"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Formulare\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Vereinsverwaltung: Formulare"}]},{"@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\/55001134","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=55001134"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001134\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}