{"id":88062023,"date":"2019-11-08T11:47:22","date_gmt":"2019-11-08T11:47:22","guid":{"rendered":"http:\/\/access-basics.de\/index.php\/88062023.html"},"modified":"2019-11-08T11:47:22","modified_gmt":"2019-11-08T11:47:22","slug":"88062023","status":"publish","type":"page","link":"https:\/\/access-im-unternehmen.de\/88062023\/","title":{"rendered":"Access im Unternehmen 06\/2023"},"content":{"rendered":"<h3>Datenmodelle f\u00fcr die Rechnungsverwaltung<\/h3>\n<p>Beim Schreiben von Anwendungen, mit denen Rechnungen erstellt werden sollen, stellt sich immer wieder die Frage nach dem korrekten Datenmodell. Davon ausgehend, dass es nicht das perfekte Datenmodell f\u00fcr alle Anwendungsf\u00e4lle gibt, wollen wir in diesem Beitrag einmal unterschiedliche Ans\u00e4tze betrachten und diskutieren. Diese haben eines gemein: Die Anwendung mit diesem Datenmodell soll die M\u00f6glichkeit\u00a0bieten, sowohl Bestellungen zu erfassen als auch Rechnungen und Lieferscheinen zu erstellen. Wie welche Daten gespeichert werden und welche M\u00f6glichkeiten es gibt, schauen wir uns nun an.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Datenmodelle_fuer_die_Rechnungsverwaltung\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Bug: Unterformular entl\u00e4dt bei Bereichsh\u00f6he gleich 0<\/h3>\n<p>Es gibt den einen oder anderen Bug in Microsoft Access, der nicht als solcher identifiziert werden kann, weil man einfach nicht herausfindet, wie man ein Fehlverhalten reproduzierbar ausl\u00f6st. Im vorliegenden Fall ist es einem unserer findigen Kollegen gelungen, einen Bug zu erkennen, der bisher nach unserer Recherche noch nicht dokumentiert wurde. Es handelt sich um einen Bug, der je nach Konstellation mal gar keine Auswirkungen hat und mal schwere Folgen mit sich bringen kann. Den Ausl\u00f6ser zu identifizieren ist auch alles andere als trivial \u2013 aber wir haben ihn gleich im Titel pr\u00e4sentiert: Wenn die H\u00f6he eines Unterformulars gleich 0 wird, entl\u00e4dt Access das Formular. Welche Schritte zum Nachvollziehen n\u00f6tig sind, welche Folgen dies haben kann und wie sich das Problem beheben l\u00e4sst, erl\u00e4utern wir in diesem Beitrag.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Bug_Unterformular_entlaedt_bei_Bereichshoehe_gleich_0\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Dateneingabe in Haupt- und Unterformular<\/h3>\n<p>Wenn man Daten in die Tabellen einer 1:n-Beziehung eingeben m\u00f6chte, nutzt man in der Regel ein Haupt- und ein Unterformular. Das Hauptformular nimmt die Daten der Mastertabelle auf, das Unterformular die Daten der Detailtabelle. Wenn man nun keine weiteren Vorsichtsma\u00dfnahmen trifft, kann der Benutzer Daten in das Unterformular eingeben, ohne dass das Hauptformular einen Datensatz anzeigt. Damit erzeugt er Datens\u00e4tze in der Detailtabelle, die mit keinem Datensatz der Mastertabelle verkn\u00fcpft sind. Das ist aus mehreren Gr\u00fcnden schlecht \u2013 diese schauen wir uns an und zeigen, wie wir das Problem beheben k\u00f6nnen.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Dateneingabe_in_Haupt_und_Unterformular\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Unterformular erst nach Validierung aktivieren<\/h3>\n<p>Im Beitrag Dateneingabe in Haupt- und Unterformular (www.access-im-unternehmen.de\/1463) haben wir gezeigt, wir man bei der Eingabe neuer Daten verhindert, dass der Benutzer Daten in das Unterformular eingibt, bevor ein Datensatz im Hauptformular angelegt wurde. Das kann man noch vertiefen, wenn das Hauptformular Felder enth\u00e4lt, die validiert werden m\u00fcssen, bevor der dortige Datensatz gespeichert werden kann. Wir schauen uns an einem einfachen Beispiel an, wie sich eine Validierung auf die L\u00f6sung aus dem oben genannten Beitrag auswirkt.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Unterformular_erst_nach_Validierung_aktivieren\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Benutzerdefinierte Standardwerte<\/h3>\n<p>Standardwerte f\u00fcr Felder legt in der Regel der Entwickler beim Definieren des Datenmodells in der Entwurfsansicht der Tabellen fest. W\u00e4hrend man in bestimmten Ma\u00dfen dynamische Werte nutzen kann wie beispielsweise mit der Datum()-Funktion\u00a0f\u00fcr Datumsfelder, ist man ansonsten recht unflexibel. Leider lassen sich dort nur einige eingebaute Funktionen nutzen, wir k\u00f6nnen keine benutzerdefinierten VBA-Funktionen einsetzen. Aber welche benutzerdefinierten Standardwerte wollen wir \u00fcberhaupt nutzen \u2013 und wo wollen wir diese festlegen? Die Einsatzzwecke sind vielf\u00e4ltig und prinzipiell k\u00f6nnen wir jedes Feld mit einem benutzerdefinierten Standardwert nutzen. Wichtig ist der Gedanke dahinter: Sinnvoll gew\u00e4hlte Standardwerte sparen dem Benutzer wertvolle Zeit bei der Dateneingabe. Wenn wir zum Beispiel eine Datenbank planen, die \u00fcberwiegend weibliche Kontakte verwaltet, ist es sinnvoll, als Anrede \u00bbFrau\u00ab vorzugeben. Oder wir haben eine Autowerkstatt, die haupts\u00e4chlich Fahrzeuge einer bestimmten Marke repariert \u2013 dann macht es Sinn, diese vorzubelegen. Wir k\u00f6nnen auch dynamisch den zuletzt verwendeten Eintrag als Standardwert angeben oder auch den meistgenutzen. Wie wir dies realisieren, zeigen wir im vorliegenden Beitrag.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Benutzerdefinierte_Standardwerte\">Zum Artikel &#8230;<\/a><\/p>\n<h3>1:n-Beziehung mit Standardzuordnung verwalten<\/h3>\n<p>Im Beitrag\u00a0\u00bbRechnungsverwaltung: Kundenadressen ausgliedern\u00ab (www.access-im-unternehmen.de\/1470) verwalten wir zu jedem Kunden mehrere Adressen, die dem Kunden \u00fcber ein Fremdschl\u00fcsselfeld in der Adresstabelle zugewiesen sind. F\u00fcr jeden Kunden legen wir in dieser Tabelle eine Standardadresse fest. Damit ist einiger Pflegeaufwand verbunden, denn wir m\u00fcssen sicherstellen, dass immer genau eine Adresse je Kunde als Standardadresse markiert ist. In diesem Beitrag schauen wir uns an, wie wir sicherstellen k\u00f6nnen, dass die Daten immer konsistent sind und wir nicht pl\u00f6tzlich mehrere Standardadressen je Kunde vorfinden \u2013 oder gar keine.  <\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/1nBeziehung_mit_Standardzuordnung_verwalten\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Select Case-Bedingung f\u00fcr Texte optimieren<\/h3>\n<p>Normalerweise verwenden wir die Select Case-Bedingung\u00a0so, dass wir im Kopf denen einen Teil des Vergleichsausdrucks platzieren und in den einzelnen Case-Zweigen die Vergleichswerte. Genau genommen ist das der gro\u00dfe Unterschied zur If&#8230;Then-Bedingung, die immer den kompletten Ausdruck in einem Zweig darstellt. Die If&#8230;Then-Bedingung scheint daher bei der Auswertung von Zeichenketten Vorteile zu haben. Wir k\u00f6nnen aber auch die Select Case-Bedingung prima f\u00fcr Zeichenketten nutzen.<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Select_CaseBedingung_fuer_Texte_optimieren\">Zum Artikel &#8230;<\/a><\/p>\n<h3>Standardzuordnung per Datenmakro<\/h3>\n<p>W\u00e4hrend wir den Beitrag \u00bb1:n-Beziehung mit Standardzuordnung verwalten\u00ab (www.access-im-unternehmen.de\/1469)\u00a0schrieben, haben wir uns gefragt, ob man die Einhaltung der Konstistenz bei 1:n-Beziehungen mit Standardzuordnung nicht auch auf andere Weise sicherstellen kann als per VBA-Code. Zumal wir diesen auch noch in allen Formularen erneut programmieren m\u00fcssten, welche die Daten aus dieser 1:n-Beziehung darstellen. Uns fielen zwei L\u00f6sungsans\u00e4tze ein: Der erste sind die mit Access 2010 eingef\u00fchrten Datenmakros, also eine Art Trigger f\u00fcr Access-Datenbanken. Die zweite sind die echten Trigger, und zwar die vom SQL Serve. In diesem Beitrag schauen wir uns nun die Variante mit den Datenmakros an. Kann man unser Vorhaben damit abbilden? Und wenn ja, wie?<\/p>\n<p><a href=\"http:\/\/www.access-im-unternehmen.de\/Standardzuordnung_per_Datenmakro\">Zum Artikel &#8230;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Datenmodelle f\u00fcr die Rechnungsverwaltung Beim Schreiben von Anwendungen, mit denen Rechnungen erstellt werden sollen, stellt sich immer wieder die Frage nach dem korrekten Datenmodell. Davon ausgehend, dass es nicht das perfekte Datenmodell f\u00fcr alle Anwendungsf\u00e4lle<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","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":""},"class_list":["post-88062023","page","type-page","status-publish","hentry"],"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>Access im Unternehmen 06\/2023 - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access im Unternehmen 06\/2023\" \/>\n<meta property=\"og:description\" content=\"Datenmodelle f\u00fcr die Rechnungsverwaltung Beim Schreiben von Anwendungen, mit denen Rechnungen erstellt werden sollen, stellt sich immer wieder die Frage nach dem korrekten Datenmodell. Davon ausgehend, dass es nicht das perfekte Datenmodell f\u00fcr alle Anwendungsf\u00e4lle\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/88062023\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\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=\"4\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/88062023\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/88062023\\\/\",\"name\":\"Access im Unternehmen 06\\\/2023 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"datePublished\":\"2019-11-08T11:47:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/88062023\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/88062023\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/88062023\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access im Unternehmen 06\\\/2023\"}]},{\"@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\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Access im Unternehmen 06\/2023 - Access im Unternehmen","robots":{"index":"noindex","follow":"follow"},"og_locale":"de_DE","og_type":"article","og_title":"Access im Unternehmen 06\/2023","og_description":"Datenmodelle f\u00fcr die Rechnungsverwaltung Beim Schreiben von Anwendungen, mit denen Rechnungen erstellt werden sollen, stellt sich immer wieder die Frage nach dem korrekten Datenmodell. Davon ausgehend, dass es nicht das perfekte Datenmodell f\u00fcr alle Anwendungsf\u00e4lle","og_url":"https:\/\/access-im-unternehmen.de\/88062023\/","og_site_name":"Access im Unternehmen","twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"4\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/88062023\/","url":"https:\/\/access-im-unternehmen.de\/88062023\/","name":"Access im Unternehmen 06\/2023 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"datePublished":"2019-11-08T11:47:22+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/88062023\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/88062023\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/88062023\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access im Unternehmen 06\/2023"}]},{"@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\/"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/pages\/88062023","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/page"}],"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=88062023"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/pages\/88062023\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=88062023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}