{"id":55000460,"date":"2019-10-01T00:00:00","date_gmt":"2020-04-06T16:32:44","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=460"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ligaverwaltung_Teil_2_Formulare","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html","title":{"rendered":"Ligaverwaltung, Teil 2: Formulare"},"content":{"rendered":"<p class='introduction'>F&uuml;r die meisten Sportarten gibt es Wettbewerbe in Ligen. Oder zumindest Turniere, die ja meist auch als kleine Liga angesehen werden k&ouml;nnen mit Spielpaarungen und Tabellen. Jedenfalls gibt eine Verwaltung solcher Ligen jede Menge Stoff f&uuml;r eine Datenbankanwendung &#8211; mit Datenmodell, Abfragen, Formularen zur Eingabe der Daten und Berichten, um Spielpl&auml;ne und Tabellen auszugeben. Im zweiten Teil der Artikelreihe programmieren wir die Formulare, die zur Eingabe der Daten der Ligaverwaltung n&ouml;tig sind.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1905_Ligaverwaltung.accdb<\/b>.<\/p>\n<h2>Rapid Prototyping<\/h2>\n<p>Ich betreibe immer Rapid Prototyping. Das hei&szlig;t, ich konzipiere nicht die komplette Anwendung durch, bevor ich sie programmiere, sondern ich fange einfach an zu programmieren. Daf&uuml;r ist Microsoft Access auch das perfekte Tool, denn es gibt keine andere Entwicklungsumgebung f&uuml;r Datenbanken f&uuml;r Windows-Systeme, mit der Sie so schnell Ergebnisse erhalten.<\/p>\n<p>Im ersten Teil dieser Artikelreihe haben wir ein Datenmodell f&uuml;r eine Ligaverwaltung erstellt, wie es uns sinnvoll erscheint und dabei die eine oder andere Abw&auml;gung getroffen. Beim Definieren des Datenmodells sollte man sorgf&auml;ltig arbeiten, denn jede Entscheidung, die nachtr&auml;glich revidiert werden muss, wirkt sich auf alle folgenden Ebenen aus &#8211; auf die Abfragen, Formulare und Berichte sowie auf den VBA-Code der Anwendung.<\/p>\n<p>Wenn wir nun starten, die Benutzeroberfl&auml;che f&uuml;r die Ligaverwaltung zu programmieren, werden wir m&ouml;glicherweise noch auf Probleme im Datenmodell sto&szlig;en, die wir dann direkt beheben werden.<\/p>\n<p>Wie starten wir beim Prototyping Wir wollen eine Anwendung erschaffen, die dem Benutzer eine Vorstellung von der Bedienung und den enthaltenen Funktionen gibt. Dazu geh&ouml;rt, dass der Benutzer damit auch alle Daten eingeben kann, die f&uuml;r den Betrieb der Anwendung n&ouml;tig sind. Wir arbeiten uns deshalb am Datenmodell entlang und erstellen zuerst die Formulare, die f&uuml;r die Eingabe der grundlegenden Daten n&ouml;tig sind &#8211; zum Beispiel die Ligen und die Spieljahre. Die Tabelle <b>tblLigenSpieljahre <\/b>kombiniert die Ligen und die Spieljahre. Als N&auml;chstes ben&ouml;tigen wir die Mannschaften. Wenn wir diese eingegeben haben, k&ouml;nnen wir sie einer Kombination aus Liga und Spieljahr zuordnen. Erst dann k&ouml;nnen wir die Spieltage und somit den Spielplan f&uuml;r eine Liga festlegen. Dazu wollen wir sp&auml;ter einen praktischen Editor bereitstellen. Stehen die Spieltage, soll der Benutzer in einem eigenen Formular die Ergebnisse von Spieltagen eingeben k&ouml;nnen. Aus den Ergebnissen eines oder mehrerer Spieltage resultieren dann die Tabellenst&auml;nde, die nur noch ausgegeben werden sollen. Dazu stellen wir geeignete Berichte bereit &#8211; das allerdings erst in einem sp&auml;teren Teil der Artikelreihe. Nun starten wir erst einmal mit den Tabellen f&uuml;r  die Basisdaten.<\/p>\n<h2>Formular frmLigen<\/h2>\n<p>Das erste Formular soll der Eingabe und der Verwaltung der Ligen dienen. Dazu erstellen wir zun&auml;chst ein Unterformular namens <b>sfmLigenVerwalten<\/b>. &uuml;ber die Eigenschaft <b>Datensatzquelle <\/b>weisen wir ihm die Tabelle <b>tblLigen <\/b>als Datenquelle zu. Damit es alle Daten dieser Tabelle in der Datenblattansicht ausgibt, ziehen wir alle drei Felder der Tabelle aus der Feldliste in den Detailbereich der Entwurfsansicht. Sie brauchen die Felder dort nicht ordentlich anzuordnen, denn wir stellen die Ansicht ohnehin &uuml;ber die Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>um. Das Ergebnis finden Sie in Bild 1.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_001.png\" alt=\"Entwurf des Unterformulars sfmLigenVerwalten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Entwurf des Unterformulars sfmLigenVerwalten<\/p>\n<p>Nun schlie&szlig;en wir das Unterformular und erstellen das Hauptformular namens <b>frmLigenVerwalten<\/b>. Diesem f&uuml;gen wir per Drag and Drop den Eintrag f&uuml;r das Unterformular <b>sfmLigenVerwalten <\/b>zum Detailbereich hinzu. Darunter ordnen wir noch eine Schaltfl&auml;che zum Schlie&szlig;en des Formulars an. Au&szlig;erdem entfernen wir das Beschriftungsfeld, das automatisch mit dem Unterformular zum Formular hinzugef&uuml;gt wurde und &auml;ndern die Eigenschaften <b>Bildlaufleisten<\/b>, <b>Navigationsschaltfl&auml;chen <\/b>und <b>Datensatzmarkierer <\/b>auf <b>Nein <\/b>sowie <b>Automatisch zentrieren <\/b>auf <b>Ja<\/b>, sodass dieses wie in Bild 2 aussieht.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_002.png\" alt=\"Entwurf des Formulars frmLigenVerwalten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Entwurf des Formulars frmLigenVerwalten<\/p>\n<p>F&uuml;r die Schaltfl&auml;che <b>cmdOK <\/b>hinterlegen wir die folgende Ereignisprozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n    DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Danach k&ouml;nnen wir schon die ersten Ligen eingeben, wie Bild 3 zeigt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_003.png\" alt=\"Formular zur Eingabe von Ligen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Formular zur Eingabe von Ligen<\/p>\n<h2>Spieljahre verwalten<\/h2>\n<p>Danach k&uuml;mmern wir uns direkt um ein Formular beziehungsweise ein Formular samt Unterformular zur Eingabe von Spieljahren. Das Unterformular soll <b>sfmSpieljahreVerwalten <\/b>hei&szlig;en und verwendet die Tabelle <b>tblSpieljahre <\/b>als Datensatzquelle. Wir f&uuml;gen auch hier alle Felder der Tabelle zum Detailbereich des Formulars hinzu. Dann stellen wir die Eigenschaft <b>Standardansicht <\/b>auf <b>Datenblatt <\/b>ein.<\/p>\n<p>Das Formular f&uuml;gen wir nach dem Speichern und Schlie&szlig;en ebenfalls per Drag and Drop aus dem Navigationsbereich von Access in ein neues Formular namens <b>frmSpieljahreVerwalten <\/b>ein. Hier f&uuml;hren wir die gleichen Schritte wie zuvor beim Hauptformular <b>frmLigenVerwalten <\/b>durch, sodass sich in der Entwurfsansicht die Ansicht aus Bild 4 ergibt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_004.png\" alt=\"Formular zur Eingabe von Spieljahren\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Formular zur Eingabe von Spieljahren<\/p>\n<h2>Spieljahre und Ligen zusammenf&uuml;hren<\/h2>\n<p>An dieser Stelle taucht die erste interessante Frage auf: Zu welchem Zeitpunkt erstellen wir die Kombinationen aus Liga und Spieljahr Diese Kombination speichern wir ja in einer eigenen Tabelle namens <b>tblLigenSpieljahre<\/b>. Die Eintr&auml;ge sollen unter anderem eine Bezeichnung wie <b>Bundesliga 2019\/2020 <\/b>liefern. Die Idee ist: Wir legen immer neue Eintr&auml;ge an, wenn der Benutzer entweder eine neue Liga oder ein neues Spieljahr hinzuf&uuml;gt. Wir k&ouml;nnen in beiden F&auml;llen die gleiche Prozedur aufrufen, die wie in Listing 1 aussieht. Diese Prozedur definiert zwei Recordsets auf Basis der Tabellen <b>tblLigen <\/b>und <b>tblSpieljahre<\/b>. Sie durchl&auml;uft die Datens&auml;tze der Tabelle <b>tblLigen <\/b>in einer &auml;u&szlig;eren <b>Do While<\/b>-Schleife und die der Tabelle <b>tblSpieljahre <\/b>in einer inneren <b>Do While<\/b>-Schleife. Damit die Eintr&auml;ge der inneren Schleife nach dem ersten Durchlauf der inneren und &auml;u&szlig;eren Schleife erneut durchlaufen werden, m&uuml;ssen wir den Datensatzzeiger der inneren Schleife danach mit <b>rstSpieljahre.MoveFirst <\/b>wieder auf den ersten Datensatz einstellen. In der inneren <b>Do While<\/b>-Schleife f&uuml;hren wir bei deaktivierter Fehlerbehandlung eine <b>INSERT INTO<\/b>-Anweisung aus, die den Wert des Feldes <b>ID <\/b>der beiden Recordsets sowie die Kombination der beiden Felder <b>Liga <\/b>aus <b>rstLigen <\/b>und <b>Spieljahr <\/b>aus <b>rstSpieljahre <\/b>in die Felder der Tabelle <b>tblLigenSpieljahre <\/b>eintr&auml;gt.<\/p>\n<pre>&lt;font color=blue&gt;Public Sub &lt;\/font&gt;LigenUndSpieljahreAktualisieren()\r\n     &lt;font color=blue&gt;Dim &lt;\/font&gt;db&lt;font color=blue&gt; As &lt;\/font&gt;DAO.Database\r\n     &lt;font color=blue&gt;Dim &lt;\/font&gt;rstLigen&lt;font color=blue&gt; As &lt;\/font&gt;DAO.Recordset\r\n     &lt;font color=blue&gt;Dim &lt;\/font&gt;rstSpieljahre&lt;font color=blue&gt; As &lt;\/font&gt;DAO.Recordset\r\n     &lt;font color=blue&gt;Set&lt;\/font&gt; db = CurrentDb\r\n     &lt;font color=blue&gt;Set&lt;\/font&gt; rstLigen = db.OpenRecordset(\"tblLigen\", dbOpenDynaset)\r\n     &lt;font color=blue&gt;Set&lt;\/font&gt; rstSpieljahre = db.OpenRecordset(\"tblSpieljahre\", dbOpenDynaset)\r\n     &lt;font color=blue&gt;Do While&lt;\/font&gt; &lt;font color=blue&gt;Not&lt;\/font&gt; rstLigen.EOF\r\n         &lt;font color=blue&gt;Do While&lt;\/font&gt; &lt;font color=blue&gt;Not&lt;\/font&gt; rstSpieljahre.EOF\r\n             On Error Resume &lt;font color=blue&gt;Next&lt;\/font&gt;\r\n             db.Execute \"INSERT INTO tblLigenSpieljahre(LigaSpieljahr, LigaID, SpieljahrID) VALUES('\" & rstLigen!Liga & \" \" _\r\n                 & rstSpieljahre!Spieljahr & \"', \" & rstLigen!ID & \", \" & rstSpieljahre!ID & \")\", dbFailOnError\r\n             &lt;font color=blue&gt;If &lt;\/font&gt;Err.Number = 3022&lt;font color=blue&gt; Then&lt;\/font&gt;\r\n                 db.Execute \"UPDATE tblLigenSpieljahre SET LigaSpieljahr = '\" & rstLigen!Liga & \" \" & rstSpieljahre!Spieljahr _\r\n                     & \"' WHERE LigaID = \" & rstLigen!ID & \" AND SpieljahrID = \" & rstSpieljahre!ID, dbFailOnError\r\n             &lt;font color=blue&gt;End If&lt;\/font&gt;\r\n             &lt;font color=blue&gt;On Error GoTo&lt;\/font&gt; 0\r\n             rstSpieljahre.Move&lt;font color=blue&gt;Next&lt;\/font&gt;\r\n         &lt;font color=blue&gt;Loop&lt;\/font&gt;\r\n         rstSpieljahre.MoveFirst\r\n         rstLigen.Move&lt;font color=blue&gt;Next&lt;\/font&gt;\r\n     &lt;font color=blue&gt;Loop&lt;\/font&gt;\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Aktualisieren der Kombinationen aus Ligen und Spieljahren<\/p>\n<p>Es kann sein, dass dabei ein Fehler mit der Nummer <b>3022 <\/b>auftritt, wenn die Kombination aus Liga und Spieljahr schon in der Tabelle angelegt wurde &#8211; und zwar deshalb, weil wir einen eindeutigen, zusammengesetzten Index f&uuml;r diese beiden Tabellen angelegt haben. Wenn dieser Fehler auftritt, brauchen wir den Datensatz nat&uuml;rlich nicht erneut anzulegen. Aber gegebenenfalls hat der Benutzer in der Zwischenzeit den Namen der Liga ge&auml;ndert.<\/p>\n<p>Also pr&uuml;fen wir nach der <b>INSERT INTO<\/b>-Anweisung, ob <b>Err.Number <\/b>den Wert <b>3022 <\/b>enth&auml;lt, und f&uuml;hren in diesem Fall noch eine <b>UPDATE<\/b>-Anweisung aus, welche die Kombination aus Liga und Spieljahr im Feld <b>LigaSpieljahr <\/b>der Zieltabelle <b>tblLigenSpieljahre <\/b>erg&auml;nzt. Nachdem wir in beiden Schleifen alle Kombinationen aus Liga und Spieljahr durchlaufen haben, sieht die Tabellen f&uuml;r unsere wenigen Beispieldatens&auml;tzen danach wie in Bild 5 aus.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_005.png\" alt=\"Die Tabelle tblLigenSpieljahre mit einigen Beispieldatens&auml;tzen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Die Tabelle tblLigenSpieljahre mit einigen Beispieldatens&auml;tzen<\/p>\n<p>Nun m&uuml;ssen wir nur noch den Aufruf dieser Prozedur &uuml;berall dort einf&uuml;gen, wo der Benutzer die Liga oder das Spieljahr &auml;ndern kann. Am einfachsten ist es, dies beim Schlie&szlig;en der beiden Formulare <b>frmLigenVerwalten <\/b>und <b>frmSpieljahreVerwalten <\/b>zu erledigen.<\/p>\n<p>Dazu nutzen wir das Ereignis <b>Beim Entladen <\/b>der beiden Formulare. Die dadurch ausgel&ouml;ste Ereignisprozedur sieht so aus:<\/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;\">Call<\/span> LigenUndSpieljahreAktualisieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Zur Sicherheit: Die Namen im Feld <b>LigaSpieljahr <\/b>werden dabei immer und bei jeder &auml;nderung einer der beiden Tabellen an die Werte der dortigen Felder angepasst.<\/p>\n<p>Nun haben wir die beiden Formulare zur Verwaltung von Ligen und Spieljahren so erstellt, dass der Access-kundige Benutzer diese verwenden kann &#8211; er muss wissen, dass man zum L&ouml;schen beispielsweise einen Datensatz &uuml;ber den Datensatzmarkierer markieren und dann die Entfernen-Taste bet&auml;tigen muss und er sollte wissen, wie er einen neuen Datensatz anlegen kann.<\/p>\n<h2>Mannschaften verwalten<\/h2>\n<p>Auch die Mannschaften wollen erst einmal eingegeben werden, bevor man sich um die Zuteilung zu Ligen\/Spieljahren und Spielpl&auml;nen k&uuml;mmern kann.<\/p>\n<p>Also erstellen wir ein Hauptformular namens <b>frmMannschaftenVerwalten <\/b>und ein Unterformular namens <b>sfmMannschaftenVerwalten<\/b>, wobei das Unterformular wieder die Daten der Tabelle <b>tblMannschaften <\/b>in der Datenblattansicht anzeigt und das Hauptformular das Unterformular sowie die Schaltfl&auml;che <b>OK <\/b>enth&auml;lt. Das erlaubt dann die Eingabe von Mannschaften wie in Bild 6.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_460_006.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_460_006.png\" alt=\"Mannschaften per Formular verwalten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Mannschaften per Formular verwalten<\/p>\n<h2>Ligen, Spieljahre und Mannschaften zuordnen<\/h2>\n<p>Danach k&ouml;nnen wir uns an ein etwas aufwendigeres Formular begeben. Dieses soll dazu dienen, die in der Tabelle <b>tblLigenSpieljahre <\/b>definierten Kombinationen aus Ligen und Spieljahren mit den Mannschaften aus der Tabelle <b>tblMannschaften <\/b>zu verkn&uuml;pfen.<\/p>\n<p>Dieses Formular soll so aussehen, dass wir im Hauptformular mit einem Kombinationsfeld die Kombination aus Liga und Spieljahr ausw&auml;hlen und dann &uuml;ber ein Unterformular die Mannschaften zuordnen k&ouml;nnen. Dazu erstellen wir zun&auml;chst das Hauptformular und f&uuml;gen diesem ein Kombinationsfeld namens <b>cboLigaSpieljahr <\/b>hinzu. Dieses Kombinationsfeld erh&auml;lt als Datensatzherkunft die folgende Abfrage auf Basis der Tabelle <b>tblLigenSpieljahre<\/b>:<\/p>\n<pre>SELECT ID, LigaSpieljahr FROM tblLigenSpieljahre;<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000460\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000460?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000460\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F&uuml;r die meisten Sportarten gibt es Wettbewerbe in Ligen. Oder zumindest Turniere, die ja meist auch als kleine Liga angesehen werden k&ouml;nnen mit Spielpaarungen und Tabellen. Jedenfalls gibt eine Verwaltung solcher Ligen jede Menge Stoff f&uuml;r eine Datenbankanwendung &#8211; mit Datenmodell, Abfragen, Formularen zur Eingabe der Daten und Berichten, um Spielpl&auml;ne und Tabellen auszugeben. Im zweiten Teil der Artikelreihe programmieren wir die Formulare, die zur Eingabe der Daten der Ligaverwaltung n&ouml;tig sind.<\/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":[662019,66052019,44000014],"tags":[],"class_list":["post-55000460","post","type-post","status-publish","format-standard","hentry","category-662019","category-66052019","category-Loesungen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ligaverwaltung, Teil 2: Formulare - Access [basics]<\/title>\n<meta name=\"description\" content=\"F\u00fcr die meisten Sportarten gibt es Wettbewerbe in Ligen. Oder zumindest Turniere, die ja meist auch als kleine Liga angesehen werden k\u00f6nnen mit Spielpaarungen und Tabellen. Jedenfalls gibt eine Verwaltung solcher Ligen jede Menge Stoff f\u00fcr eine Datenbankanwendung \u2013 mit Datenmodell, Abfragen, Formularen zur Eingabe der Daten und Berichten, um Spielpl\u00e4ne und Tabellen auszugeben. Im zweiten Teil der Artikelreihe programmieren wir die Formulare, die zur Eingabe der Daten der Ligaverwaltung n\u00f6tig sind.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ligaverwaltung, Teil 2: Formulare - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"F\u00fcr die meisten Sportarten gibt es Wettbewerbe in Ligen. Oder zumindest Turniere, die ja meist auch als kleine Liga angesehen werden k\u00f6nnen mit Spielpaarungen und Tabellen. Jedenfalls gibt eine Verwaltung solcher Ligen jede Menge Stoff f\u00fcr eine Datenbankanwendung \u2013 mit Datenmodell, Abfragen, Formularen zur Eingabe der Daten und Berichten, um Spielpl\u00e4ne und Tabellen auszugeben. Im zweiten Teil der Artikelreihe programmieren wir die Formulare, die zur Eingabe der Daten der Ligaverwaltung n\u00f6tig sind.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-06T16:32:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_460_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"26\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_460_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\",\"name\":\"Ligaverwaltung, Teil 2: Formulare - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html#primaryimage\"},\"datePublished\":\"2020-04-06T16:32:44+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"F\\u00fcr die meisten Sportarten gibt es Wettbewerbe in Ligen. Oder zumindest Turniere, die ja meist auch als kleine Liga angesehen werden k\\u00f6nnen mit Spielpaarungen und Tabellen. Jedenfalls gibt eine Verwaltung solcher Ligen jede Menge Stoff f\\u00fcr eine Datenbankanwendung \\u2013 mit Datenmodell, Abfragen, Formularen zur Eingabe der Daten und Berichten, um Spielpl\\u00e4ne und Tabellen auszugeben. Im zweiten Teil der Artikelreihe programmieren wir die Formulare, die zur Eingabe der Daten der Ligaverwaltung n\\u00f6tig sind.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_2_Formulare.html\",\"name\":\"Ligaverwaltung, Teil 2: Formulare\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000460"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000460\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}