Beitrag aus SmartTools Access Weekly
Datenbasis für Access-Formulare aktualisieren
Access 365 2024 2021 2019 2016 2013 2010
FRAGE Da ich in meiner Datenbank Auswahlfelder für Orte getrennt für Postfach und für Straße verwende, die in einer Liste "Orte" zusammengeführt werden, müssen die beteiligten Formulare (Kontaktpersonen, Ort1, Ort2) nach Änderungen oder Neuanlagen gespeichert, d. h. geschlossen werden. Ich möchte hierzu eine Ereignisprozedur einer Schaltfläche Alles speichern programmieren, die alle Formulare schließt und nach dem Öffnen des Formulars "Kontaktpersonen" wieder auf den vor dem Schließen verwendeten Datensatz positioniert. Meine bisherigen Versuche mit "DoCmd.Close" und "DoCmd.OpenForm" führen jedoch nur zu Fehlermeldungen.
H. Schreiber
ANTWORT Ein Formular, in dem eine Ereignisprozedur nach Klick auf eine Schaltfläche abläuft, kann nicht geschlossen werden, da damit auch das Modul mit dem VBA-Code geschlossen werden würde. Ein Schließen der Formulare ist auch nicht nötig: Sobald Sie in einem Formular einen Datensatz ändern oder neu anlegen, speichert Access diesen sofort in den zugrundeliegenden Tabellen. Objekte wie Formulare oder Kombinationsfelder, die auf diesen Tabellen basieren, verfügen über eine Methode "Requery", die den Inhalt aus den Tabellen im Objekt aktualisieren. Wenn Sie also beispielsweise in Ihrem Formular "Kontaktpersonen" ein Kombinationsfeld "AuswahlOrt" verwenden, könnte die Ereignisprozedur einer Schaltfläche Alles speichern so aussehen:
Sub btnAllesSpeichern_Click()
'Datensatz in diesem Formular speichern
DoCmd.RunCommand acCmdSaveRecord
'Datensätze in anderen Formularen speichern
Forms("Ort1").Application.DoCmd.RunCommand _
acCmdSaveRecord
Forms("Ort2").Application.DoCmd.RunCommand _
acCmdSaveRecord
Me.AuswahlOrt.Requery
End Sub
Diese Anweisungen speichern vorsichtshalber den aktuellen Datensatz im Formular "Kontaktpersonen" sowie in "Ort1" und "Ort2". Abschließend wird "Requery" für das Kombinationsfeld zur Auswahl es Ortes aufgerufen, um dessen Inhalt zu aktualisieren.