In Detailformularen zur Anzeige von einzelnen Datensätzen gibt es keine für den Benutzer ersichtliche Möglichkeit, was beim Schließen des Formulars mit einem neu angelegten oder einem geänderten Datensatz geschieht. Werden die Änderungen gespeichert oder nicht Und wenn ich Änderungen durchgeführt habe und diese verwerfen möchte, wie gehe ich dann vor In diesem Artikel gehen wir auf dieses Thema ein und zeigen sowohl das Standardverhalten von Access-Formularen bezüglich der verschiedenen Aktionen auf als auch die von uns bevorzugte Möglichkeit, dem Benutzer das Speichern oder das Verwerfen der durchgeführten Änderungen zu realisieren.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank FormulareBasics_OKUndAbbrechen.accdb.
Ausgangssituation
Wenn ein Access-Einsteiger ein Detailformular baut, das keine Schaltflächen oder VBA enthält, und diese Anwendung einem Benutzer bereitstellt, sieht dieser zwar die Daten in den entsprechenden Feldern im Formular. Er weiß jedoch nicht, was genau geschieht, wenn er beispielsweise die Daten eines vorhandenen Datensatzes ändert oder Daten zu einem neuen, leeren Datensatz hinzufü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).
Bild 1: Anzeige des aktuellen Zustands des Datensatzes
Auch beim Bearbeiten eines neu angelegten Datensatzes taucht dieses Icon auf. Dadurch weiß der Benutzer aber noch nicht, was geschieht, wenn er nun das Formular beispielsweise durch einen Mausklick auf die Schließen-Schaltfläche rechts oben in der Titelleiste schließt. Wird der Datensatz gespeichert Bleibt er im Bearbeiten-Zustand Werden die Änderungen verworfen
Datensatz speichern
Erst durch Ausprobieren findet er heraus, dass die Änderungen beim Schließen des Formulars gespeichert werden – außer, er hat die Daten so geändert, dass diese gegen eine Restriktion verstoßen und der Datensatz nicht gespeichert werden kann. Dann würde jedoch eine entsprechende Meldung erscheinen. Das Gleiche geschieht, wenn der Benutzer einen Datensatz bearbeitet und dann über die Navigationsschaltflächen zu einem anderen Datensatz wechselt oder einen neuen Datensatz anlegt.
Und es gibt noch weitere Methoden, um den aktuellen Datensatz zu speichern, wenn seit dem letzten Speichern Änderungen vorgenommen wurden:
- Mit der Tastenkombination Strg + S
- Durch Anklicken des Datensatzmarkierers
- Programmieren einer eigenen Funktion, die beispielsweise durch eine Schaltfläche ausgelöst werden kann
Auch das sind jedoch keine für den unerfahrenen Benutzer offensichtlichen Optionen zum Speichern.
Datensatz verwerfen
Das Stift-Symbol im Datensatzmarkierer zeigt an, dass es seit dem letzten Speichern des Datensatzes Änderungen gegeben hat. In diesem Fall können wir nicht nur die durchgeführten Ä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öglichkeiten:
- Betätigen der Esc-Taste
- Programmieren einer eigenen Funktion, die beispielsweise durch eine Schaltfläche ausgelöst werden kann
Wir sehen: Die Menge der eingebauten Möglichkeiten ist begrenzt. Außerdem ist die eine Möglichkeit für den Benutzer nicht offen ersichtlich.
Umsetzen der verschiedenen Funktionen mit Schaltflächen und VBA
Die Lösung, die wir für diesen Zweck vorschlagen, basiert auf dem Einsatz von Schaltflächen, bei denen der Benutzer anhand der Beschriftung erkennen kann, ob der Datensatz gespeichert oder ob die Änderungen verworfen werden sollen.
Wir können Schaltflächen mit Makros ausstatten, aber diese sind relativ unflexibel. Mit der Programmiersprache VBA stehen uns umfangreiche Möglichkeiten zur Programmierung der gewünschten Funktionen zur Verfügung. Wir wollen verschiedene Schaltflächen vorstellen, von denen Du Dir die gewünschten aussuchen kannst. Wir verwenden standardmäßig zwei Schaltflächen:
- OK: Speichert die Änderungen seit dem letzten Speichern und schließt das Formular.
- Abbrechen: Verwirft die Änderungen seit dem letzten Speichern und schließt das Formular.
Man könnte hier auch noch eine Schaltfläche zum Zwischenspeichern der bisherigen Änderungen hinzufügen.
Es gibt jedoch auch andere Varianten. Denkbar wären auch die beiden folgenden Schaltflächen:
- Datensatz speichern: Speichert nur die Änderungen, ohne das Formular zu schließen
- Änderungen verwerfen: Verwirft die Änderungen und schließt das Formular ebenfalls nicht, sodass der Benutzer wieder die zuletzt gespeicherte Fassung vor sich sieht.
- Hier könnte man noch eine Schaltfläche zum Schließen des Formulars hinzufügen, wenn man beispielsweise die Schließen-Schaltfläche oben rechts in der Titelleiste deaktiviert oder ausgeblendet hat.
Wir schauen uns in den folgenden Abschnitten die verschiedenen Varianten und den jeweils benötigten VBA-Code an. Dabei verweisen wir schon einmal auf den Artikel Formulare [basics]: Schaltflächen programmieren (www.access-basics.de/645), in dem wir genauer auf die Eigenschaften von Schaltflächen und das Anlegen von Ereignisprozeduren für das Beim Klicken-Ereignis eingehen.
Speichern eines Datensatzes per VBA
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öglichkeiten, die alle voraussetzen, dass der Benutzer alle benötigten Daten eingegeben hat und diese keine Restriktionen verletzten:
- Wir schließen das Formular einfach. Dadurch wird der aktuelle Datensatz automatisch gespeichert.
- Wir wechseln den Datensatz. Dadurch werden offene Änderungen am aktuellen Datensatz gespeichert.
- Wir rufen einen von mehreren Befehlen auf, mit dem wir explizit den aktuellen Datensatz speichern.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: