{"id":55000323,"date":"2016-12-01T00:00:00","date_gmt":"2020-01-24T15:59:38","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=323"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datenbanken_von_Altlasten_saeubern","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html","title":{"rendered":"Datenbanken von Altlasten s&auml;ubern"},"content":{"rendered":"<p class='introduction'>Dass sich Access-Datenbanken mit der Zeit aufbl&auml;hen, d&uuml;rfte jedem Entwickler einmal aufgefallen sein. Beim L&ouml;schen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem &uuml;berschrieben von Objekten, f&auml;llt M&uuml;ll an, der oberfl&auml;chlich nicht sichtbar ist. &uuml;ber die Ribbon-Funktion <b>Komprimieren und Reparieren<\/b> kann aber ein Teil dieses M&uuml;lls leider nicht entfernt werden. Mit recht &uuml;berschaubarem VBA-Code &auml;ndert sich das.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1606_Saeubern.accdb<\/b>.<\/p>\n<h2>Tempor&auml;re Datenbankobjekte<\/h2>\n<p>Access-Datenbanken k&ouml;nnen sowohl Tabellen, wie Abfragen, enthalten, die Sie im Navigationsbereich nicht zu Gesicht bekommen. Auf diese m&ouml;chten wir hier den Fokus setzen.<\/p>\n<p>Die Beispieldatenbank implementiert vier relational verkn&uuml;pften Tabellen zu Kundenadressen. Auf diese setzt das Formular <b>frmKunden<\/b> auf (Bild 1). Die Haupttabelle <b>tblKunden<\/b> steht f&uuml;r die Datenherkunft des Formulars, die Detailtabellen <b>tblAnreden<\/b>, <b>tblOrte<\/b> und <b>tblLaender<\/b> werden f&uuml;r die Kombinationsfelder verwendet. Die Steuerelemente kamen durch einfaches Hineinziehen der <b>Vorhandenen Datenfelder<\/b> zustande. Kombinationsfelder ergeben sich deshalb, weil f&uuml;r die Felder <b>IDAnrede<\/b>, <b>IDOrt<\/b> und <b>IDLand<\/b> im Entwurf von <b>tblKunden<\/b> jeweils <b>Nachschlagetabellen<\/b> angegebenen wurden. Also f&uuml;llt Access hier im Eigenschaftenblatt neben dem <b>Steuerelementinhalt<\/b> auch gleich die passenden Quelltabellen ein und verkn&uuml;pft die Felder, wie dies aus der Abbildung hervorgeht.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/frmKunden_design.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/frmKunden_design.png\" alt=\"Das Kundenformular enth&auml;lt drei Kombinationsfelder, deren Datenherkunft auf den entsprechenden Detailtabellen basiert\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Das Kundenformular enth&auml;lt drei Kombinationsfelder, deren Datenherkunft auf den entsprechenden Detailtabellen basiert<\/p>\n<p>Grunds&auml;tzlich legt Access nun beim Speichern sowohl f&uuml;r das Formular, wie auch f&uuml;r Kombinations- und Listenfelder intern Abfragen an, die weder im Navigationsbereich, noch im Formularentwurf in Erscheinung treten. Doch &ouml;ffnen Sie einmal die Systemtabelle <b>MSysObjects<\/b>, die einen Katalog aller Datenbankobjekte verzeichnet. Bild 2 zeigt, dass hier vier Abfragen zu sehen sind. Sie werden durch die Spalte <b>Type<\/b> identifiziert, wenn diese den Wert <b>5<\/b> aufweist. F&uuml;r die Namen der Abfragen ist jeweils das Pr&auml;fix <b>~sq_<\/b> spezifiziert. Folgt darauf ein <b>f<\/b>, so handelt es sich um die Datenherkunft eines Formulars. Access verwendet also nicht die Tabelle <b>tblKunden<\/b> selbst, sondern eine auf ihr beruhende Abfrage f&uuml;r die Daten des Formulars. Der Name des Formulars schlie&szlig;t sich daran an. F&uuml;r die Datenherkunft von Kombinationsfeldern steht eine <b>~sq_c<\/b>&#8230;-Abfrage. Ihr folgt der Name des Formulars, in dem sich das Kombinationsfeld befindet, und schlie&szlig;lich der Name des Steuerelements, ebenfalls durch ein <b>~sq_c<\/b>-Pr&auml;fix gekennzeichnet.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/MSysObjects_SQ.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/MSysObjects_SQ.png\" alt=\"In der Systemtabelle MSysObjects finden sich die versteckten Abfragen f&uuml;r die Kombinationsfelder des Formulars, beginnend jeweils mit dem Pr&auml;fix ~sq_\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: In der Systemtabelle MSysObjects finden sich die versteckten Abfragen f&uuml;r die Kombinationsfelder des Formulars, beginnend jeweils mit dem Pr&auml;fix ~sq_<\/p>\n<p>Diese Abfragen sind &uuml;ber die Oberfl&auml;che nicht zu erreichen, wohl aber &uuml;ber DAO! Geben Sie so etwa den SQL-String f&uuml;r die dem <b>Anrede<\/b>-Steuerelement zugrundeliegende Abfrage im VBA-Direktfenster aus:<\/p>\n<pre>  CurrentDB.QueryDefs _\r\n (\" ~sq_cfrmKunden~sq_cIDAnrede\").SQL<\/pre>\n<p>Sie erhalten dieses Ergebnis:<\/p>\n<pre>SELECT DISTINCTROW *\r\nFROM tblAnreden;<\/pre>\n<p>Das Formular hat diese Datenherkunft:<\/p>\n<pre>  CurrentDB.QueryDefs _\r\n   (\"~sq_ffrmKunden\").SQL \r\n> \"SELECT DISTINCTROW *\r\nFROM tblKunden;\"<\/pre>\n<p>Das <b>DISTINCTROW<\/b> sagt der <b>Database Engine<\/b>, dass die zur&uuml;ckgelieferten Datens&auml;tze eindeutig sein sollen. Das ist an sich &uuml;berfl&uuml;ssig, da die Tabellen allesamt einen <b>Prim&auml;rschl&uuml;ssel<\/b> aufweisen.<\/p>\n<p>Entfernten Sie diesen sp&auml;ter aber, so k&ouml;nnten auch doppelte identische Datens&auml;tze in ihr abgespeichert werden. Hier bekommt das <b>DISTINCTROW<\/b> dann einen Sinn.<\/p>\n<p>Diese internen Abfragen sind &uuml;brigens nicht schreibgesch&uuml;tzt. Sie k&ouml;nnen ihren SQL-Ausdruck problemlos &auml;ndern; etwa so:<\/p>\n<pre>CurrentDB.QueryDefs _\r\n   (\"~sq_ffrmKunden\").SQL = _\r\n\"SELECT * FROM tblKunden\"<\/pre>\n<p>Diese &auml;nderung bleibt auch nach Modifikationen am Formularentwurf erhalten! Es versteht sich von selbst, dass Sie hier nicht unsinnige Ausdr&uuml;cke einsetzen sollten, um Probleme zu vermeiden.<\/p>\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\/55000323\/\">\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\/55000323?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\/55000323\/\"\/>\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>Dass sich Access-Datenbanken mit der Zeit aufbl&auml;hen, d&uuml;rfte jedem Entwickler einmal aufgefallen sein. Beim L&ouml;schen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem &uuml;berschrieben von Objekten, f&auml;llt M&uuml;ll an, der oberfl&auml;chlich nicht sichtbar ist. &uuml;ber die Ribbon-Funktion <b>Komprimieren und Reparieren<\/b> kann aber ein Teil dieses M&uuml;lls leider nicht entfernt werden. Mit recht &uuml;berschaubarem VBA-Code &auml;ndert sich das.<\/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":[662016,66062016,44000017],"tags":[],"class_list":["post-55000323","post","type-post","status-publish","format-standard","hentry","category-662016","category-66062016","category-Tipps_und_Tricks"],"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>Datenbanken von Altlasten s&auml;ubern - Access [basics]<\/title>\n<meta name=\"description\" content=\"Dass sich Access-Datenbanken mit der Zeit aufbl\u00e4hen, d\u00fcrfte jedem Entwickler einmal aufgefallen sein. Beim L\u00f6schen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem \u00dcberschrieben von Objekten, f\u00e4llt M\u00fcll an, der oberfl\u00e4chlich nicht sichtbar ist. \u00dcber die Ribbon-Funktion Komprimieren und Reparieren kann aber ein Teil dieses M\u00fclls leider nicht entfernt werden. Mit recht \u00fcberschaubarem VBA-Code \u00e4ndert sich das.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenbanken von Altlasten s&auml;ubern - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Dass sich Access-Datenbanken mit der Zeit aufbl\u00e4hen, d\u00fcrfte jedem Entwickler einmal aufgefallen sein. Beim L\u00f6schen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem \u00dcberschrieben von Objekten, f\u00e4llt M\u00fcll an, der oberfl\u00e4chlich nicht sichtbar ist. \u00dcber die Ribbon-Funktion Komprimieren und Reparieren kann aber ein Teil dieses M\u00fclls leider nicht entfernt werden. Mit recht \u00fcberschaubarem VBA-Code \u00e4ndert sich das.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:59:38+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\/frmKunden_design.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=\"9\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\/Datenbanken_von_Altlasten_saeubern.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/frmKunden_design.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html\",\"name\":\"Datenbanken von Altlasten s&auml;ubern - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:59:38+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Dass sich Access-Datenbanken mit der Zeit aufbl\\u00e4hen, d\\u00fcrfte jedem Entwickler einmal aufgefallen sein. Beim L\\u00f6schen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem \\u00dcberschrieben von Objekten, f\\u00e4llt M\\u00fcll an, der oberfl\\u00e4chlich nicht sichtbar ist. \\u00dcber die Ribbon-Funktion Komprimieren und Reparieren kann aber ein Teil dieses M\\u00fclls leider nicht entfernt werden. Mit recht \\u00fcberschaubarem VBA-Code \\u00e4ndert sich das.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.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\/Datenbanken_von_Altlasten_saeubern.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Datenbanken_von_Altlasten_saeubern.html\",\"name\":\"Datenbanken von Altlasten s&auml;ubern\"}}]},{\"@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\/55000323","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=55000323"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000323\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}