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

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert