Wie implementiere ich ein Auto-Save-Verhalten mit den neuen Ereignissen in Formularen?

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 wird
  • Form_AfterUpdate – nach erfolgreichem Speichern
  • Form_Dirty – sobald ein Feld verändert wurde
  • Form_BeforeInsert – sobald ein neuer Datensatz begonnen wird
  • Form_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_BeforeUpdate fü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

Nach oben scrollen