{"id":55000475,"date":"2020-02-01T00:00:00","date_gmt":"2020-07-03T10:46:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=475"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Ligaverwaltung_Teil_4_Ergebnisse","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html","title":{"rendered":"Ligaverwaltung, Teil 4: Ergebnisse"},"content":{"rendered":"<p class='introduction'>In den ersten drei Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten k&ouml;nnen. Jetzt beginnt der eigentliche Spa&szlig;, denn wir f&uuml;gen nun die Formulare und Berichte hinzu, mit denen der Benutzer die Ergebnisse eingeben und die Tabellen f&uuml;r die einzelnen Spieltage ermitteln kann.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>2001_Ligaverwaltung.accdb<\/b>.<\/p>\n<h2>Zusammenfassung der bisherigen Artikel<\/h2>\n<p>Bevor wir zum Endbenutzer-Teil der Anwendung &uuml;bergehen, schauen wir uns noch einmal an, was wir bisher schon erledigt haben. Im ersten Teil der Artikelreihe haben wir das Datenmodell entworfen, dass uns m&ouml;glichst flexibel das Verwalten von Ligen, Mannschaften, Spieljahren und Spieltagen mit den Spielpaarungen erlaubt. Dabei bedeutet Flexibilit&auml;t auch fast immer zus&auml;tzliche Komplexit&auml;t, was sich im Datenmodell niederschl&auml;gt. Das Ergebnis sehen Sie in Bild 1. Diese Tabellen enthalten alle notwendigen Daten f&uuml;r die Verwaltung der oben genannten Elemente.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_475_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_475_001.png\" alt=\"Datenmodell der Ligaverwaltung\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Datenmodell der Ligaverwaltung<\/p>\n<p>Die Anwendung unterteilen wir in zwei Teile: Der eine ist f&uuml;r den Manager der Ligaverwaltung, der die Ligen definiert, die Mannschaften eingibt, die Spieljahre anlegt und die Mannschaften zu den Kombinationen aus Ligen und Spieljahren hinzuf&uuml;gt. So ist es leicht m&ouml;glich, dass eine Mannschaft im einen Jahr in der ersten Liga spielt und dann im folgenden Jahr in der zweiten Liga gef&uuml;hrt wird, weil sie abgestiegen ist. Spannend wird es beim Verwalten der Spieltage, weil es je nach Anzahl der Mannschaften immer komplizierter wird, einen Spielplan zusammenzustellen, bei dem jede Mannschaft ungef&auml;hr in der gleichen Reihenfolge gegen die &uuml;brigen Mannschaften spielt und die Hin- und die R&uuml;ckrunde identische Paarungen nur mit vertauschtem Heimrecht bietet. So ist das zumindest in den deutschen Fu&szlig;ball-Ligen, in England etwa hat die Hinrunde nichts mit der R&uuml;ckrunde gemein, was die Reihenfolge der Spielpaarungen angeht.<\/p>\n<p>Die L&ouml;sung bietet f&uuml;r die Anzahl von 18 Mannschaften einen Generator f&uuml;r den Spielplan an, der sich an den Vorgaben f&uuml;r die Spielplangestaltung der ersten Bundesliga im deutschen Fu&szlig;ball anlehnt.<\/p>\n<p>Wir gehen an dieser Stelle davon aus, dass der Manager der Ligaverwaltung die Mannschaften zu einer Kombination aus Liga und Spieljahr hinzugef&uuml;gt und &uuml;ber das Formular <b>frmSpielpaarungen <\/b>den Spielplan generiert hat. Damit haben wir beispielsweise f&uuml;r die Saison Bundesliga 2019\/20 einen Spielplan zusammengestellt, dessen dritter Spieltag im Formular <b>frmSpielpaarungen <\/b>wie in Bild 2 erscheint.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_475_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_475_002.png\" alt=\"Spielpaarungen der Saison\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Spielpaarungen der Saison<\/p>\n<h2>Eingabe von Ergebnissen per Unterformular<\/h2>\n<p>Die Tabelle <b>tblSpielpaarungen <\/b>enth&auml;lt weit mehr Felder als die in der Abbildung sichtbaren Felder <b>Spieldatum<\/b>, <b>HeimmannschaftID <\/b>und <b>AuswaertsmannschaftID<\/b>. Nicht sichtbar ist noch die Zuordnung zum Spieltag und au&szlig;erdem fehlen noch die Felder <b>ToreHeimmannschaft<\/b>, <b>ToreAuswaertsmannschaft<\/b>, <b>PunkteHeimmannschaft <\/b>und <b>PunkteAuswaertsmannschaft<\/b>. <\/p>\n<p>Die beiden Felder <b>ToreHeimmannschaft <\/b>und <b>Toreauswaertsmannschaft <\/b>wollen wir im nachfolgend angelegten Unterformular noch hinzuf&uuml;gen. Wenn der Benutzer beide eingegeben hat, sollen die Inhalte der Felder <b>PunkteHeimmannschaft <\/b>und <b>PunkteAuswaertsmannschaft <\/b>angepasst werden, die ja aus dem Verh&auml;ltnis der Tore resultieren.<\/p>\n<p>Dem neuen Formular <b>sfmSpielergebnisse <\/b>f&uuml;gen wir als Datensatzquelle eine auf der Tabelle <b>tblSpielpaarungen <\/b>basierende Abfrage hinzu. Warum die Daten nicht gleich aus der Tabelle nehmen Weil wir beispielsweise nicht die Auswahlfelder anbieten wollen, die wir im Unterformular des Formulars <b>frmSpielpaarungen <\/b>gesehen haben, sondern hier sollen Textfelder gef&uuml;llt werden, die der Benutzer nicht mehr editieren kann. Die Abfrage sieht wie in Bild 3 aus und bezieht noch zwei Instanzen der Tabelle <b>tblMannschaften <\/b>mit ein. Aus diesen beziehen wir die Namen der Mannschaften statt der in den beiden Feldern <b>HeimmannschaftID <\/b>und <b>AuswaertsmannschaftID<\/b> und bezeichnen die resultierenden Felder kurz mit <b>Heim <\/b>und <b>Gast<\/b>. In der Abbildung sind alle Felder, die in der Abfrage auftauchen, mit einem roten Rahmen versehen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_475_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_475_003.png\" alt=\"Abfrage als Datensatzquelle des Unterformulars sfmErgebnisse\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Abfrage als Datensatzquelle des Unterformulars sfmErgebnisse<\/p>\n<p>Nach dem Erstellen der Abfrage und dem Zuweisen der Abfrage als Datensatzquelle des Unterformulars <b>frmErgebnisse <\/b>ziehen wir die Felder <b>Heim<\/b>, <b>Gast<\/b>, <b>ToreHeimmannschaft <\/b>und <b>ToreAuswaertsmannschaft <\/b>in den Entwurf des Formulars. Diesmal machen wir allerdings kein Formular in der Datenblattansicht daraus, sondern wir wollen die Endlosansicht verwenden, um mehr Gestaltungsm&ouml;glichkeiten zu haben.<\/p>\n<p>Also stellen wir die Eigenschaft <b>Standardansicht <\/b>auf <b>Endlosformular <\/b>ein. Dann entfernen wir die Bezeichnungsfelder der Textfelder und ordnen die Textfelder etwa wie in Bild 4 an.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_475_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_475_004.png\" alt=\"Entwurf des Unterformulars sfmErgebnisse\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Entwurf des Unterformulars sfmErgebnisse<\/p>\n<p>F&uuml;r die beiden Felder Heim und Gast entfernen wir au&szlig;erdem noch den Rahmen, indem wir die Eigenschaft <b>Rahmenart <\/b>auf <b>Transparent <\/b>einstellen. Die Inhalte der beiden Felder werden so ausgerichtet, dass die Heimmannschaft rechtszentriert und die Gastmannschaft linkszentriert erscheint.<\/p>\n<p>Gleiches gilt f&uuml;r die Anordnung der Felder <b>ToreHeimmannschaft <\/b>und <b>ToreAuswaertsmannschaft<\/b>.<\/p>\n<p>Wechseln wir nun in die Formularansicht des zuk&uuml;nftigen Unterformulars, erhalten wir das Bild aus Bild 5. Hier fallen uns noch einige Dinge auf, die wir gern &auml;ndern m&ouml;chten:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_475_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_475_005.png\" alt=\"Das Unterformular sfmErgebnisse in der Endlosansicht\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Das Unterformular sfmErgebnisse in der Endlosansicht<\/p>\n<ul>\n<li>Der Fokus liegt auf dem Feld Heim, wodurch der Inhalt des entsprechenden Textfeldes farbig hinterlegt wird. Das soll nicht passieren, der Fokus soll nur auf den Feldern zur Eingabe des Ergebnisses liegen k&ouml;nnen.<\/li>\n<li>Wir ben&ouml;tigen keine alternierenden Hintergrundfarben.<\/li>\n<li>Datensatzmarkierer und Navigationsschaltfl&auml;chen sind ebenfalls &uuml;berfl&uuml;ssig.<\/li>\n<li>Wenn Sie ganz nach unten scrollen, finden Sie einen neuen, leeren Datensatz vor. Dieser soll nicht angezeigt werden.<\/li>\n<li>Hier erscheinen noch nicht die Paarungen eines Spieltags. Das wird sich jedoch &auml;ndern, wenn das Formular als Unterformular zum Einsatz kommt und &uuml;ber die Eigenschaften <b>Verkn&uuml;pfen von <\/b>und <b>Verkn&uuml;pfen nach <\/b>des Unterformular-Steuerelements nach dem im Hauptformular festgelegten Spieltag gefiltert wird.<\/li>\n<\/ul>\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\/55000475\/\">\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\/55000475?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\/55000475\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"34aae43e8a\"\/>\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>In den ersten drei Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten k&ouml;nnen. Jetzt beginnt der eigentliche Spa&szlig;, denn wir f&uuml;gen nun die Formulare und Berichte hinzu, mit denen der Benutzer die Ergebnisse eingeben und die Tabellen f&uuml;r die einzelnen Spieltage ermitteln kann.<\/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":[66012020,662020,44000014],"tags":[],"class_list":["post-55000475","post","type-post","status-publish","format-standard","hentry","category-66012020","category-662020","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 4: Ergebnisse - Access [basics]<\/title>\n<meta name=\"description\" content=\"In den ersten drei Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten k\u00f6nnen. Jetzt beginnt der eigentliche Spa\u00df, denn wir f\u00fcgen nun die Formulare und Berichte hinzu, mit denen der Benutzer die Ergebnisse eingeben und die Tabellen f\u00fcr die einzelnen Spieltage ermitteln kann.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ligaverwaltung, Teil 4: Ergebnisse - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In den ersten drei Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten k\u00f6nnen. Jetzt beginnt der eigentliche Spa\u00df, denn wir f\u00fcgen nun die Formulare und Berichte hinzu, mit denen der Benutzer die Ergebnisse eingeben und die Tabellen f\u00fcr die einzelnen Spieltage ermitteln kann.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-03T10:46:03+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_475_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=\"12\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_4_Ergebnisse.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_475_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html\",\"name\":\"Ligaverwaltung, Teil 4: Ergebnisse - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html#primaryimage\"},\"datePublished\":\"2020-07-03T10:46:03+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"In den ersten drei Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten k\\u00f6nnen. Jetzt beginnt der eigentliche Spa\\u00df, denn wir f\\u00fcgen nun die Formulare und Berichte hinzu, mit denen der Benutzer die Ergebnisse eingeben und die Tabellen f\\u00fcr die einzelnen Spieltage ermitteln kann.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.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_4_Ergebnisse.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Ligaverwaltung_Teil_4_Ergebnisse.html\",\"name\":\"Ligaverwaltung, Teil 4: Ergebnisse\"}}]},{\"@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\/55000475","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=55000475"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000475\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}