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_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
No responses yet