Wie protokolliere ich Datenänderungen in Access auf Tabellenebene?

8

Ich unterstütze eine Access-Datenbank für eine gemeinnützige Organisation. Wir haben einige Probleme mit Daten, die sich auf mysteriöse Weise ändern, und es gab einige freundschaftliche Debatten darüber, ob dies durch Benutzer verursacht wird, die nicht über die besten Computerkenntnisse verfügen, oder durch einige meiner Hintergrundverarbeitungen.

Ich habe einige Überprüfungen auf UI-Ebene für diese Bedingungen hinzugefügt, möchte jedoch einige Überprüfungen auf Datenbanktabellenebene vornehmen, um zu protokollieren, wenn bestimmte Felder geändert werden. Auf diese Weise erfahre ich, ob die Änderung von einem Benutzer oder nur von einer im Hintergrund ausgeführten Aktualisierungsabfrage initiiert wurde. Normalerweise würde ich einen on updateTrigger verwenden, aber meines Wissens unterstützt Access keine Trigger. Gibt es andere Access- oder Trigger-ähnliche Funktionen in Access?

BenV
quelle

Antworten:

4

Leider hat Microsoft Access keine Trigger oder ähnliches. Auf den ersten Blick haben Sie ein paar unattraktive Möglichkeiten:

  • Erstellen DateModifiedund UserModifiedSpalten, und aktualisieren Sie Ihren Code , diese Werte umfassen. Der Nachteil ist, dass Sie nur die letzte Person kennen, die einen Datensatz aktualisiert hat, und keine Historie zum Anschauen haben.
  • Behalten Sie Ihr Access-Frontend bei und portieren Sie Ihre Tabellen auf ein SQL Server Express-Backend. Auf diese Weise können Sie Trigger (sowie Sicherungsjobs und andere nützliche Dinge) verwenden.
LittleBobbyTables - Au Revoir
quelle
4

Zusätzlich zur LittleBobbyTables-Methode gibt es eine dritte Option, bei der _auditfür jede reguläre Tabelle eine Tabelle erstellt und eine ganze Menge Logik geschrieben wird, um sie zu unterstützen. Wenn sich die Dinge ändern, fügen Sie dazu einen Datensatz in diese Tabellen ein. (Sie wissen bereits, wann Sie die Datensätze speichern / aktualisieren / löschen, ja?)

Zugegeben, so machen es "größere Datenbanken". Der Nachteil hier ist die Menge an Logik, die Sie manuell ausführen müssen, um die Arbeit vom Typ Trigger auf einem Server zu simulieren.

jcolebrand
quelle
4

Beachten Sie, dass beispielsweise SQL Server Express kostenlos ist und möglicherweise ein Ersatz für Access sein kann. Dies würde Ihnen die Überwachungsfunktionalität geben, die Sie benötigen. Ich denke nicht, dass der "Audit Table" -Ansatz praktikabel ist. Es wird davon ausgegangen, dass jeder, der eine Verbindung zur Datenbank herstellt, dies über den "offiziellen" Client tut, in dem diese Logik installiert ist. Mit Triggern gibt es keine Möglichkeit, auf die Daten zuzugreifen, ohne dass sie von einem zufälligen Client ausgelöst werden.

Eine dritte Option ist Wireshark oder ähnliches, um den Datenverkehr zwischen dem Client und der Datenbank tatsächlich zu überwachen (ich gehe davon aus, dass dies nicht TDS, sondern ein Dateifreigabeprotokoll ist?). Dann können Sie genau sehen, wer was wann und von welchem ​​Computer aus tut. Der Nachteil dabei ist, dass viel Speicherplatz und einige Skripte für die Analyse erforderlich sind und sich auf die Leistung auswirken können.

Gaius
quelle