Speichern.
In Access eigentlich kein Thema – passiert fast Automatisch.
Aber: Viele Benutzer wissen das nicht.
Oder verlassen ein Formular, ohne zu speichern. Oder überschreiben unbeabsichtigt Daten.
Und genau da hilft ein sauberes Auto-Save-Verhalten – kontrolliert per Ereignis.
Ich zeig Dir, wie Du das in Access richtig umsetzt.
Mit Fokus auf: Zuverlässigkeit, Klarheit, Kontrolle.
Was Access schon automatisch macht
Access speichert Änderungen am Datensatz automatisch, wenn:
- der Benutzer das Formular verlässt
- ein neuer Datensatz angelegt wird
- explizit gespeichert wird (
Me.Dirty = False)
Klingt gut. Reicht aber nicht immer.
Du brauchst mehr Kontrolle, z. B. bei:
- Navigation zwischen Datensätzen
- Timer-gesteuertem Speichern (alle x Sekunden)
- Auto-Save beim Ändern bestimmter Felder
- Vorwarnung bei unbeabsichtigtem Verlassen
Neue Ereignisse, die helfen
Seit Access 2010 gibt es bessere Ereignisse für genau solche Fälle:
Form_BeforeUpdate– bevor gespeichert wirdForm_AfterUpdate– nach erfolgreichem SpeichernForm_Dirty– sobald ein Feld verändert wurdeForm_BeforeInsert– sobald ein neuer Datensatz begonnen wirdForm_Unload– beim Verlassen des Formulars
Damit kannst Du Dir den Auto-Save exakt zusammenbauen.
Variante 1: Auto-Save beim Verlassen des Datensatzes
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
Debug.Print "Neuer Datensatz wird gespeichert."
Else
Debug.Print "Änderungen werden gespeichert."
End If
End Sub
Reicht für einfache Fälle.
Wird automatisch aufgerufen, bevor Access speichert.
Variante 2: Speichern bei bestimmten Änderungen
Du willst z. B. sofort speichern, wenn sich ein Feld ändert?
Private Sub txtStatus_AfterUpdate()
If Me.Dirty Then
Me.Dirty = False
Debug.Print "Status gespeichert."
End If
End Sub
So bleibt der Datensatz aktuell – ohne auf Navigation zu warten.
Variante 3: Zeitgesteuertes Speichern (Timer)
Private Sub Form_Load()
Me.TimerInterval = 60000 ' alle 60 Sekunden
End Sub
Private Sub Form_Timer()
If Me.Dirty Then
Me.Dirty = False
Debug.Print "Auto-Save nach 60 Sekunden."
End If
End Sub
Klassisch. Funktioniert gut bei längeren Eingaben.
Aber: Informiere den Benutzer – sonst wirkt’s „magisch“.
Variante 4: Speichern beim Verlassen des Formulars erzwingen
Private Sub Form_Unload(Cancel As Integer)
If Me.Dirty Then
If MsgBox("Speichern vor dem Schließen?", vbYesNo) = vbYes Then
Me.Dirty = False
Else
Cancel = True
End If
End If
End Sub
Hilft, wenn Benutzer über das „X“ oben rechts schließen.
Und Du sichergehen willst, dass nichts verloren geht.
Optional: Auto-Save protokollieren
Private Sub Form_AfterUpdate()
Call LogAutoSave(Me.Name, Me!ID)
End Sub
Public Sub LogAutoSave(ByVal FormName As String, ByVal DatensatzID As Long)
CurrentDb.Execute "INSERT INTO tblAutoSaveLog (Formular, DatensatzID, Zeit) VALUES ('" & FormName & "', " & DatensatzID & ", Now())"
End Sub
So kannst Du nachvollziehen, wann gespeichert wurde – und was.
Wann solltest Du NICHT automatisch speichern?
- Wenn das Formular viele Pflichtfelder hat
- Wenn Validierung noch nicht abgeschlossen ist
- Wenn Du Konflikte mit anderen Benutzern vermeiden willst
Dann lieber explizit speichern, wenn alle Felder ausgefüllt sind.
Access kann Auto-Save.
Aber Du musst es kontrollieren – sonst speichert es zu spät, zu früh oder gar nicht.
Mein Vorschlag:
- Nutze
Form_BeforeUpdatefür Basis-Save - Ergänze gezielt:
AfterUpdate,Timer,Unload - Dokumentiere, wenn’s kritisch ist
- Und: Sprich mit Deinen Nutzern – sonst wundern sie sich, warum etwas plötzlich „weg“ ist


