Ziel: Wissen, wer was wann getan hat

Access kennt von sich aus kein Logging.
Wenn ein Benutzer etwas öffnet, ändert oder löscht, bekommst Du davon nichts mit.
Du willst: mitprotokollieren – aber unauffällig. Ohne Performance-Killer.

Variante 1: Zentrale Log-Tabelle

Tabelle tblBenutzerLog:

  • ID (Autowert)
  • Zeitpunkt
  • Benutzer
  • Aktion
  • Modul
  • Details

Variante 2: Logging-Funktion zentral

Public Sub LogAktion(modul As String, aktion As String, Optional details As String = "")
    Dim sql As String
    sql = "INSERT INTO tblBenutzerLog (Zeitpunkt, Benutzer, Aktion, Modul, Details) " & _
          "VALUES (Now(), '" & Environ("USERNAME") & "', '" & aktion & "', '" & modul & "', '" & Replace(details, "'", "''") & "')"
    CurrentDb.Execute sql, dbFailOnError
End Sub

Kompakt. Schnell. Sicher.

Variante 3: Anwendung starten / beenden loggen

' AutoExec-Makro → Startformular öffnen
Private Sub Form_Load()
    Call LogAktion("App", "Start")
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call LogAktion("App", "Beenden")
End Sub

Kann auch mit Timer-Überwachung kombiniert werden (s. u.).

Variante 4: Formularöffnungen loggen

Private Sub Form_Open(Cancel As Integer)
    Call LogAktion(Me.Name, "Formular geöffnet")
End Sub

Oder je nach Aktion:

  • „Suche gestartet“
  • „Details angezeigt“
  • „Neuer Datensatz begonnen“

Variante 5: Änderungen an Daten erfassen (ohne Trigger)

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.NewRecord Then
        Call LogAktion(Me.Name, "Neuer Datensatz", "Name=" & Me.Name)
    Else
        Call LogAktion(Me.Name, "Datensatz geändert", "ID=" & Me.ID)
    End If
End Sub

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
    Call LogAktion(Me.Name, "Löschung", "ID=" & Me.ID)
End Sub

So weißt Du, wer einen Datensatz angelegt, bearbeitet oder gelöscht hat.

Variante 6: Navigation überwachen

Jede Schaltfläche, die irgendwohin führt, ruft LogAktion auf:

Private Sub cmdBericht_Click()
    Call LogAktion("Navigation", "Bericht geöffnet", "rptUmsatz")
    DoCmd.OpenReport "rptUmsatz", acViewPreview
End Sub

Damit bekommst Du echte Nutzungsauswertungen.

Variante 7: Inaktivität erkennen (optional)

Timer-Logik im Hauptformular:

Private Sub Form_Timer()
    Static letzteAktion As Date

    If letzteAktion = 0 Then letzteAktion = Now()
    If DateDiff("n", letzteAktion, Now()) > 15 Then
        Call LogAktion("Sitzung", "Inaktiv >15min")
        letzteAktion = Now()
    End If
End Sub

Timer-Intervall z. B. auf 60.000 ms setzen (1 Minute)

Best Practices

  • Nutzername per Environ("USERNAME") ermitteln
  • Logging nie blockieren – also mit On Error Resume Next in der Funktion
  • sensible Daten wie Passwörter nie loggen
  • Logs regelmäßig archivieren oder löschen
  • Zugriff auf Log-Tabelle einschränken (AdminOnly)

Einsatzszenarien

  • Nutzerverhalten analysieren
  • Fehler nachvollziehen
  • Änderungen dokumentieren (Datenschutz, ISO, GoBD, DSGVO)
  • interne Revision
  • Sicherheitskontrolle

Fazit für Entwickler

Logging in Access kostet wenig – bringt aber viel.
Du bekommst Transparenz, kannst Verhalten nachvollziehen und Probleme schneller aufklären.

Tags:

No responses yet

Schreibe einen Kommentar

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