{"id":55000356,"date":"2017-06-01T00:00:00","date_gmt":"2020-01-24T15:59:50","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=356"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Individuelle_Auswahl_mit_eigener_Tabelle","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html","title":{"rendered":"Individuelle Auswahl mit eigener Tabelle"},"content":{"rendered":"<p class='introduction'>In den beiden Artikeln Datens&auml;tze individuell ausw&auml;hlen (Ausgabe 10\/2012) und Selektion im Datenblatt (aktuelle Ausgabe) nutzen wir ein zus&auml;tzliches Feld in der betroffenen Tabelle, um Datens&auml;tze individuell ausw&auml;hlen zu k&ouml;nnen. Die Methode ist sehr praktisch, kommt jedoch an ihre Grenzen, wenn Sie keinen Zugriff auf die betroffene Tabelle haben. Das kann passieren, wenn sich diese in einem Backend befindet, dessen Daten Sie nicht &auml;ndern k&ouml;nnen, weil Sie keinen Zugriff haben oder keine Berechtigung. Ein weiterer wichtiger Grund, die Selektionsdaten in einer eigenen Tabelle zu speichern, sind Mehrbenutzeranwendungen. Da bietet es sich an, die Daten bez&uuml;glich der Ansicht im Frontend zu speichern.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1703_IndividuelleAuswahl.accdb<\/b>. Wir setzen auf der im Artikel <b>Selektion im Datenblatt <\/b>beschriebene L&ouml;sung auf. Dabei entfernen wir einfach das Feld Selektiert aus der Tabelle tblKunden und f&uuml;gen dieses dann &uuml;ber eine zus&auml;tzliche Tabelle wieder hinzu. Die &uuml;brigen Schritte werden in diesem Artikel erl&auml;utert.<\/p>\n<h2>Tabelle hinzuf&uuml;gen<\/h2>\n<p>Wir gehen also nun davon aus, dass die Tabelle <b>tblKunden <\/b>sich in einer Backend-Datenbank befindet, deren Entwurf wir nicht &auml;ndern k&ouml;nnen. Daher entfernen wir das Feld <b>Selektiert <\/b>aus dieser Tabelle und speichern die Tabelle.<\/p>\n<p>Die Tabelle, in der wir die Selektionsdaten speichern wollen, soll den Namen <b>tblKundenSelektion <\/b>erhalten und zwei Felder enthalten. Das erste hei&szlig;t <b>KundeID <\/b>und wird als Zahlenfeld mit einem eindeutigen Index versehen. Das zweite Feld ist das Feld, das wir aus der urspr&uuml;nglichen Tabelle entnommen haben &#8211; es hei&szlig;t dementsprechend <b>Selektiert<\/b> (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_356_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_356_001.png\" alt=\"Die Tabelle mit dem Selektionsfeld\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Die Tabelle mit dem Selektionsfeld<\/p>\n<p>Damit wir das Feld <b>Selektiert <\/b>sauber mit der Tabelle <b>tblKunden <\/b>verbinden k&ouml;nnen, m&uuml;ssen wir eine 1:1-Beziehung zwischen den beiden Tabellen anlegen. Das bedeutet, dass es f&uuml;r jeden Datensatz der Tabelle <b>tblKunden <\/b>nur maximal einen Datensatz in der Tabelle <b>tblKundenSelektion <\/b>geben darf, dessen Wert im Feld <b>KundeID <\/b>mit dem Feld <b>KundeID <\/b>in <b>tblKunden <\/b>&uuml;bereinstimmt.<\/p>\n<p>Dazu stellen wir die Verbindung zwischen den beiden Tabellen her, und zwar im Beziehungen-Fenster von Access. Diesem f&uuml;gen Sie die beiden Tabellen <b>tblKunden <\/b>und <b>tblKundenSelektion <\/b>hinzu. Anschlie&szlig;end ziehen Sie den Beziehungspfeil vom Feld <b>KundeID <\/b>der Tabelle <b>tblKunden <\/b>auf das gleichnamige Feld der Tabelle <b>tblKundenSelektion<\/b> und legen Sie f&uuml;r die Beziehung <b>Referenzielle Integrit&auml;t <\/b>und <b>L&ouml;schweitergabe <\/b>fest (siehe Bild 2). Versuchen Sie dies andersherum, erhalten Sie beim Versuch, referenzielle Integrit&auml;t festzulegen eine Fehlermeldung. Hier geht es um die Richtung, in der die Beziehung angelegt wird: Access pr&uuml;ft im letzteren Fall, der einen Fehler ausl&ouml;st, ob die Tabelle <b>tblKunden <\/b>Datens&auml;tze mit Werten im Feld <b>KundeID <\/b>enth&auml;lt, die nicht in der Tabelle <b>tblKunden-Selektion <\/b>enthalten sind. Und das ist zu diesem Zeitpunkt definitiv der Fall, da wir die Tabelle <b>tblKundenSelektion <\/b>ja soeben erst angelegt haben.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_356_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_356_002.png\" alt=\"Herstellen der Beziehung zwischen den beiden Tabellen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Herstellen der Beziehung zwischen den beiden Tabellen<\/p>\n<p>In der Abbildung erkennen Sie auch, dass Access keine 1:n-Beziehung angelegt hat, wie dies &uuml;blicherweise der Fall ist, sondern eine 1:1-Beziehung. Woran erkennt Access dies Ganz einfach: Wir haben auf beiden Seiten Felder, f&uuml;r die ein eindeutiger Index festgelegt ist. Und wenn keines der Felder einen Wert mehr als einmal enthalten kann, dann kann man zwischen diesen Feldern auch keine 1:n-Beziehung anlegen.<\/p>\n<p>Sie k&ouml;nnen nun testweise einen Datensatz in der Tabelle <b>tblKundenSelektion <\/b>anlegen, der in der Tabelle <b>KundeID <\/b>einen Wert enth&auml;lt, der auch in der Tabelle <b>tblKunden <\/b>vorkommt. Wenn Sie im Feld <b>KundeID <\/b>der Tabelle <b>tblKundenSelektion <\/b>einen Wert anlegen, der nicht im Feld <b>KundeID <\/b>der Tabelle <b>tblKunden <\/b>vorkommt, l&ouml;st dies einen Fehler aus.<\/p>\n<p>Und wozu ben&ouml;tigen wir die L&ouml;schtweitergabe Diese sorgt daf&uuml;r, dass wenn ein Datensatz in der Tabelle <b>tblKunden <\/b>gel&ouml;scht wird, auch ein eventuell mit diesem Datenstaz der Tabelle <b>tblKunden <\/b>verkn&uuml;pfter Datensatz der Tabelle <b>tblKundenSelektion <\/b>gel&ouml;scht wird. Auf diese Weise verhindern wir, dass die Tabelle Karteileichen speichert.<\/p>\n<h2>Anpassung der zugreifenden Instanzen<\/h2>\n<p>Nun haben wir zwar das Feld <b>Selektiert <\/b>aus der Tabelle <b>tblKunden <\/b>in die Tabelle <b>tblKundenSelektion <\/b>ausgelagert und eine Beziehung zwischen den beiden Tabellen hergestellt &#8211; dies hilft uns aber nicht weiter, wenn wir nun &uuml;ber das Formular auf das Feld <b>Selektiert <\/b>zugreifen wollen. Ganz im Gegenteil: Wenn wir das Formular frmHauptformularErweitert der Beispieldatenbank &ouml;ffnen, erhalten wir den Fehler aus Bild 3. Dieser tritt auf, wenn wir in der Ereignisprozedur <b>Form_Load <\/b>versuchen, das Feld <b>Selektiert <\/b>in allen Datens&auml;tzen der Tabelle <b>tblKunden <\/b>auf <b>False <\/b>(<b>0<\/b>) einzustellen. Das Formular wird dann zwar ge&ouml;ffnet und zeigt auch seine Daten im Unterformular an, aber der Versuch, einen der Datens&auml;tze zu selektieren, f&uuml;hrt dann wieder zu einem Laufzeitfehler.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_356_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_356_003.png\" alt=\"Fehler beim Versuch, auf das Feld Selektiert zuzugreifen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Fehler beim Versuch, auf das Feld Selektiert zuzugreifen<\/p>\n<h2>Abfrage zum Zusammenf&uuml;hren der Tabellen<\/h2>\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\/55000356\/\">\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\/55000356?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\/55000356\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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 beiden Artikeln Datens&auml;tze individuell ausw&auml;hlen (Ausgabe 10\/2012) und Selektion im Datenblatt (aktuelle Ausgabe) nutzen wir ein zus&auml;tzliches Feld in der betroffenen Tabelle, um Datens&auml;tze individuell ausw&auml;hlen zu k&ouml;nnen. Die Methode ist sehr praktisch, kommt jedoch an ihre Grenzen, wenn Sie keinen Zugriff auf die betroffene Tabelle haben. Das kann passieren, wenn sich diese in einem Backend befindet, dessen Daten Sie nicht &auml;ndern k&ouml;nnen, weil Sie keinen Zugriff haben oder keine Berechtigung. Ein weiterer wichtiger Grund, die Selektionsdaten in einer eigenen Tabelle zu speichern, sind Mehrbenutzeranwendungen. Da bietet es sich an, die Daten bez&uuml;glich der Ansicht im Frontend zu speichern.<\/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":[662017,66032017,44000010],"tags":[],"class_list":["post-55000356","post","type-post","status-publish","format-standard","hentry","category-662017","category-66032017","category-Formulare_mit_VBA_programmieren"],"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>Individuelle Auswahl mit eigener Tabelle - Access [basics]<\/title>\n<meta name=\"description\" content=\"In den beiden Artikeln Datens\u00e4tze individuell ausw\u00e4hlen (Ausgabe 10\/2012) und Selektion im Datenblatt (aktuelle Ausgabe) nutzen wir ein zus\u00e4tzliches Feld in der betroffenen Tabelle, um Datens\u00e4tze individuell ausw\u00e4hlen zu k\u00f6nnen. Die Methode ist sehr praktisch, kommt jedoch an ihre Grenzen, wenn Sie keinen Zugriff auf die betroffene Tabelle haben. Das kann passieren, wenn sich diese in einem Backend befindet, dessen Daten Sie nicht \u00e4ndern k\u00f6nnen, weil Sie keinen Zugriff haben oder keine Berechtigung. Ein weiterer wichtiger Grund, die Selektionsdaten in einer eigenen Tabelle zu speichern, sind Mehrbenutzeranwendungen. Da bietet es sich an, die Daten bez\u00fcglich der Ansicht im Frontend zu speichern.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Individuelle Auswahl mit eigener Tabelle - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In den beiden Artikeln Datens\u00e4tze individuell ausw\u00e4hlen (Ausgabe 10\/2012) und Selektion im Datenblatt (aktuelle Ausgabe) nutzen wir ein zus\u00e4tzliches Feld in der betroffenen Tabelle, um Datens\u00e4tze individuell ausw\u00e4hlen zu k\u00f6nnen. Die Methode ist sehr praktisch, kommt jedoch an ihre Grenzen, wenn Sie keinen Zugriff auf die betroffene Tabelle haben. Das kann passieren, wenn sich diese in einem Backend befindet, dessen Daten Sie nicht \u00e4ndern k\u00f6nnen, weil Sie keinen Zugriff haben oder keine Berechtigung. Ein weiterer wichtiger Grund, die Selektionsdaten in einer eigenen Tabelle zu speichern, sind Mehrbenutzeranwendungen. Da bietet es sich an, die Daten bez\u00fcglich der Ansicht im Frontend zu speichern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:50+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_356_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=\"10\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\/Individuelle_Auswahl_mit_eigener_Tabelle.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_356_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html\",\"name\":\"Individuelle Auswahl mit eigener Tabelle - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:50+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"In den beiden Artikeln Datens\\u00e4tze individuell ausw\\u00e4hlen (Ausgabe 10\/2012) und Selektion im Datenblatt (aktuelle Ausgabe) nutzen wir ein zus\\u00e4tzliches Feld in der betroffenen Tabelle, um Datens\\u00e4tze individuell ausw\\u00e4hlen zu k\\u00f6nnen. Die Methode ist sehr praktisch, kommt jedoch an ihre Grenzen, wenn Sie keinen Zugriff auf die betroffene Tabelle haben. Das kann passieren, wenn sich diese in einem Backend befindet, dessen Daten Sie nicht \\u00e4ndern k\\u00f6nnen, weil Sie keinen Zugriff haben oder keine Berechtigung. Ein weiterer wichtiger Grund, die Selektionsdaten in einer eigenen Tabelle zu speichern, sind Mehrbenutzeranwendungen. Da bietet es sich an, die Daten bez\\u00fcglich der Ansicht im Frontend zu speichern.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.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\/Individuelle_Auswahl_mit_eigener_Tabelle.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Individuelle_Auswahl_mit_eigener_Tabelle.html\",\"name\":\"Individuelle Auswahl mit eigener Tabelle\"}}]},{\"@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\/55000356","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=55000356"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000356\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}