Änderungs-Logging

Hallo,

ich suche Anregungen für die Umsetzung eines Logging-System für Daten-Änderungen in meiner Datenbank.

Es geht darum, dass ich wissen möchte welche und wann Daten in ein paar ausgewählten Tabellen geändert wurden. Leider reicht es nicht aus zu wissen, welcher Datensatz verändert wurde, sondern ich muss wissen in welchem Feld die Änderung statt gefunden hat.

Die Daten können sowohl aus Formularen, als auch über SQL Abfragen geändert werden.

In Formularen scheint es relativ einfach eine Lösung programmieren zu können, da man mit dem BeforeUpdate-Event sowie XXX.OldValue arbeiten kann. Für direkte SQL-Abfragen reicht dies aber dann natürlich nicht aus.

Die Daten befinden sich auch in einer Access-Datenbank und es wird direkt auf sie zugegriffen.

Hat jemand grundsätzliche Ideen wie man das gut lösen könnte. Mir fehlt im Moment noch ein bisschen die Orientierung :smile:

Danke & liebe Grüsse, Florian.

Wenn man das ganze mit einem Microsoft SQL Server statt Access machen würde, hätte man natürlich die Möglichkeit sogenannte Trigger einzusetzen, die Aktionen bei Änderungen automatisch durchführen (und noch viele andere Vorteile mehr).
Access ließe sich dabei weiterhin als ‚Frontend‘ verwenden. (Siehe Access-Doku)
SQL Server 2000 Desktop Engine (MSDE) ist in Office kostenlos enthalten
Gruß,
Michael

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Florian!

In Formularen scheint es relativ einfach eine Lösung
programmieren zu können, da man mit dem BeforeUpdate-Event
sowie XXX.OldValue arbeiten kann. Für direkte SQL-Abfragen
reicht dies aber dann natürlich nicht aus.

Si, und das wirst Du mit Access auch nicht hinkriegen, außer Du lässt keine SQL-Abfragen zu, sondern führst sie über eine eigene Routine auf. Heißt, DoCmd.RunSQL „UPDATE…“ oder DoCmd.OpenQuery („Aktualisierung“) ist verboten, weil Du sonst nicht an die Infos rankommst. Du könntest diese Geschichten in eine eigene Funktion einbetten, die Aktualisierungen vorher in ein SELECT mappen und damit die geänderten Datensätze und Felder ermitteln (quasi die Datenblattansicht einer Aktualisierungsabfrage in Access verarbeiten). Viel Spaß dabei:frowning: (Das wird ziemlich unlustig, glaube ich… Und die Performance geht ziemlich in den Keller.)

Die „einfachste“ Variante wird in der Tat sein, eine gescheite Server-Datenbank zugrunde zu legen, wie es Michael geschrieben hat, und dort die Änderungen ganz einfach per Trigger protokollieren zu lassen. Die dürfte dann auch noch schneller sein.

Trotzdem gutes Gelingen,
Gruß, Manfred