{"id":55000627,"date":"2023-06-01T00:00:00","date_gmt":"2023-06-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/627"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Formulare_basics_OK_und_AbbrechenButtons","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html","title":{"rendered":"Formulare [basics]: OK- und Abbrechen-Buttons"},"content":{"rendered":"<p class='introduction'>In Detailformularen zur Anzeige von einzelnen Datens&auml;tzen gibt es keine f&uuml;r den Benutzer ersichtliche M&ouml;glichkeit, was beim Schlie&szlig;en des Formulars mit einem neu angelegten oder einem ge&auml;nderten Datensatz geschieht. Werden die &Auml;nderungen gespeichert oder nicht Und wenn ich &Auml;nderungen durchgef&uuml;hrt habe und diese verwerfen m&ouml;chte, wie gehe ich dann vor In diesem Artikel gehen wir auf dieses Thema ein und zeigen sowohl das Standardverhalten von Access-Formularen bez&uuml;glich der verschiedenen Aktionen auf als auch die von uns bevorzugte M&ouml;glichkeit, dem Benutzer das Speichern oder das Verwerfen der durchgef&uuml;hrten &Auml;nderungen zu realisieren.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels findest Du in der Datenbank <b>FormulareBasics_OKUndAbbrechen.accdb<\/b>.<\/p>\n<h2>Ausgangssituation<\/h2>\n<p>Wenn ein Access-Einsteiger ein Detailformular baut, das keine Schaltfl&auml;chen oder VBA enth&auml;lt, und diese Anwendung einem Benutzer bereitstellt, sieht dieser zwar die Daten in den entsprechenden Feldern im Formular. Er wei&szlig; jedoch nicht, was genau geschieht, wenn er beispielsweise die Daten eines vorhandenen Datensatzes &auml;ndert oder Daten zu einem neuen, leeren Datensatz hinzuf&uuml;gt. Was er sieht, wenn der Benutzer den Datensatzmarkierer aktiviert hat, ob sich der Datensatz gerade in Bearbeitung befindet. Das kann er an dem Symbol oben im Datensatzmarkierer erkennen (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_627_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_627_001.png\" alt=\"Anzeige des aktuellen Zustands des Datensatzes\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Anzeige des aktuellen Zustands des Datensatzes<\/p>\n<p>Auch beim Bearbeiten eines neu angelegten Datensatzes taucht dieses Icon auf. Dadurch wei&szlig; der Benutzer aber noch nicht, was geschieht, wenn er nun das Formular beispielsweise durch einen Mausklick auf die <b>Schlie&szlig;en<\/b>-Schaltfl&auml;che rechts oben in der Titelleiste schlie&szlig;t. Wird der Datensatz gespeichert Bleibt er im Bearbeiten-Zustand Werden die &Auml;nderungen verworfen<\/p>\n<h2>Datensatz speichern<\/h2>\n<p>Erst durch Ausprobieren findet er heraus, dass die &Auml;nderungen beim Schlie&szlig;en des Formulars gespeichert werden &#8211; au&szlig;er, er hat die Daten so ge&auml;ndert, dass diese gegen eine Restriktion versto&szlig;en und der Datensatz nicht gespeichert werden kann. Dann w&uuml;rde jedoch eine entsprechende Meldung erscheinen. Das Gleiche geschieht, wenn der Benutzer einen Datensatz bearbeitet und dann &uuml;ber die Navigationsschaltfl&auml;chen zu einem anderen Datensatz wechselt oder einen neuen Datensatz anlegt.<\/p>\n<p>Und es gibt noch weitere Methoden, um den aktuellen Datensatz zu speichern, wenn seit dem letzten Speichern &Auml;nderungen vorgenommen wurden:<\/p>\n<ul>\n<li>Mit der Tastenkombination <b>Strg + S<\/b><\/li>\n<li>Durch Anklicken des Datensatzmarkierers<\/li>\n<li>Programmieren einer eigenen Funktion, die beispielsweise durch eine Schaltfl&auml;che ausgel&ouml;st werden kann<\/li>\n<\/ul>\n<p>Auch das sind jedoch keine f&uuml;r den unerfahrenen Benutzer offensichtlichen Optionen zum Speichern.<\/p>\n<h2>Datensatz verwerfen<\/h2>\n<p>Das Stift-Symbol im Datensatzmarkierer zeigt an, dass es seit dem letzten Speichern des Datensatzes &Auml;nderungen gegeben hat. In diesem Fall k&ouml;nnen wir nicht nur die durchgef&uuml;hrten &Auml;nderungen speichern, sondern diese auch verwerfen und den Datensatz in den Zustand versetzen, den er unmittelbar nach dem letzten Speichern hatte. Dazu gibt es die folgenden M&ouml;glichkeiten:<\/p>\n<ul>\n<li>Bet&auml;tigen der Esc-Taste<\/li>\n<li>Programmieren einer eigenen Funktion, die beispielsweise durch eine Schaltfl&auml;che ausgel&ouml;st werden kann<\/li>\n<\/ul>\n<p>Wir sehen: Die Menge der eingebauten M&ouml;glichkeiten ist begrenzt. Au&szlig;erdem ist die eine M&ouml;glichkeit f&uuml;r den Benutzer nicht offen ersichtlich.<\/p>\n<h2>Umsetzen der verschiedenen Funktionen mit Schaltfl&auml;chen und VBA<\/h2>\n<p>Die L&ouml;sung, die wir f&uuml;r diesen Zweck vorschlagen, basiert auf dem Einsatz von Schaltfl&auml;chen, bei denen der Benutzer anhand der Beschriftung erkennen kann, ob der Datensatz gespeichert oder ob die &Auml;nderungen verworfen werden sollen.<\/p>\n<p>Wir k&ouml;nnen Schaltfl&auml;chen mit Makros ausstatten, aber diese sind relativ unflexibel. Mit der Programmiersprache VBA stehen uns umfangreiche M&ouml;glichkeiten zur Programmierung der gew&uuml;nschten Funktionen zur Verf&uuml;gung. Wir wollen verschiedene Schaltfl&auml;chen vorstellen, von denen Du Dir die gew&uuml;nschten aussuchen kannst. Wir verwenden standardm&auml;&szlig;ig zwei Schaltfl&auml;chen:<\/p>\n<ul>\n<li><b>OK<\/b>: Speichert die &Auml;nderungen seit dem letzten Speichern und schlie&szlig;t das Formular.<\/li>\n<li><b>Abbrechen<\/b>: Verwirft die &Auml;nderungen seit dem letzten Speichern und schlie&szlig;t das Formular.<\/li>\n<\/ul>\n<p>Man k&ouml;nnte hier auch noch eine Schaltfl&auml;che zum Zwischenspeichern der bisherigen &Auml;nderungen hinzuf&uuml;gen.<\/p>\n<p>Es gibt jedoch auch andere Varianten. Denkbar w&auml;ren auch die beiden folgenden Schaltfl&auml;chen:<\/p>\n<ul>\n<li><b>Datensatz speichern<\/b>: Speichert nur die &Auml;nderungen, ohne das Formular zu schlie&szlig;en<\/li>\n<li><b>&Auml;nderungen verwerfen<\/b>: Verwirft die &Auml;nderungen und schlie&szlig;t das Formular ebenfalls nicht, sodass der Benutzer wieder die zuletzt gespeicherte Fassung vor sich sieht.<\/li>\n<li>Hier k&ouml;nnte man noch eine Schaltfl&auml;che zum Schlie&szlig;en des Formulars hinzuf&uuml;gen, wenn man beispielsweise die <b>Schlie&szlig;en<\/b>-Schaltfl&auml;che oben rechts in der Titelleiste deaktiviert oder ausgeblendet hat.<\/li>\n<\/ul>\n<p>Wir schauen uns in den folgenden Abschnitten die verschiedenen Varianten und den jeweils ben&ouml;tigten VBA-Code an. Dabei verweisen wir schon einmal auf den Artikel <b>Formulare [basics]: Schaltfl&auml;chen programmieren<\/b> (<b>www.access-basics.de\/645<\/b>), in dem wir genauer auf die Eigenschaften von Schaltfl&auml;chen und das Anlegen von Ereignisprozeduren f&uuml;r das <b>Beim Klicken<\/b>-Ereignis eingehen.<\/p>\n<h2>Speichern eines Datensatzes per VBA<\/h2>\n<p>Die erste Frage, die sich stellt, ist: Wie speichern wir eigentlich per VBA den Datensatz, der gerade in einem Formular angezeigt wird Dazu gibt es verschiedene M&ouml;glichkeiten, die alle voraussetzen, dass der Benutzer alle ben&ouml;tigten Daten eingegeben hat und diese keine Restriktionen verletzten:<\/p>\n<ul>\n<li>Wir schlie&szlig;en das Formular einfach. Dadurch wird der aktuelle Datensatz automatisch gespeichert.<\/li>\n<li>Wir wechseln den Datensatz. Dadurch werden offene &Auml;nderungen am aktuellen Datensatz gespeichert.<\/li>\n<li>Wir rufen einen von mehreren Befehlen auf, mit dem wir explizit den aktuellen Datensatz speichern.<\/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\/55000627\/\">\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\/55000627?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\/55000627\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"2c6d4a5d32\"\/>\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 Detailformularen zur Anzeige von einzelnen Datens&auml;tzen gibt es keine f&uuml;r den Benutzer ersichtliche M&ouml;glichkeit, was beim Schlie&szlig;en des Formulars mit einem neu angelegten oder einem ge&auml;nderten Datensatz geschieht. Werden die &Auml;nderungen gespeichert oder nicht Und wenn ich &Auml;nderungen durchgef&uuml;hrt habe und diese verwerfen m&ouml;chte, wie gehe ich dann vor In diesem Artikel gehen wir auf dieses Thema ein und zeigen sowohl das Standardverhalten von Access-Formularen bez&uuml;glich der verschiedenen Aktionen auf als auch die von uns bevorzugte M&ouml;glichkeit, dem Benutzer das Speichern oder das Verwerfen der durchgef&uuml;hrten &Auml;nderungen zu realisieren.<\/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":[662023,66032023,44000004],"tags":[],"class_list":["post-55000627","post","type-post","status-publish","format-standard","hentry","category-662023","category-66032023","category-Formulare_fuer_die_Dateneingabe"],"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>Formulare [basics]: OK- und Abbrechen-Buttons - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formulare [basics]: OK- und Abbrechen-Buttons - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"In Detailformularen zur Anzeige von einzelnen Datens&auml;tzen gibt es keine f&uuml;r den Benutzer ersichtliche M&ouml;glichkeit, was beim Schlie&szlig;en des Formulars mit einem neu angelegten oder einem ge&auml;nderten Datensatz geschieht. Werden die &Auml;nderungen gespeichert oder nicht Und wenn ich &Auml;nderungen durchgef&uuml;hrt habe und diese verwerfen m&ouml;chte, wie gehe ich dann vor In diesem Artikel gehen wir auf dieses Thema ein und zeigen sowohl das Standardverhalten von Access-Formularen bez&uuml;glich der verschiedenen Aktionen auf als auch die von uns bevorzugte M&ouml;glichkeit, dem Benutzer das Speichern oder das Verwerfen der durchgef&uuml;hrten &Auml;nderungen zu realisieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-01T00:00:00+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_627_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\/Formulare_basics_OK_und_AbbrechenButtons.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_627_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html\",\"name\":\"Formulare [basics]: OK- und Abbrechen-Buttons - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html#primaryimage\"},\"datePublished\":\"2023-06-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.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\/Formulare_basics_OK_und_AbbrechenButtons.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Formulare_basics_OK_und_AbbrechenButtons.html\",\"name\":\"Formulare [basics]: OK- und Abbrechen-Buttons\"}}]},{\"@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\/55000627","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=55000627"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000627\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}