Tabellenänderung dokumentieren

Hallo Gemeinde,

ich möchte die Änderungen einer im Netzwerk befindlichen Access Tabelle dokumentieren.

Die Dokumentation soll lediglich Usernamen, Datum, Uhrzeit und den betreffenden Datensatz enthalten.

Bei Änderung eines Datensatzes der Tabelle, soll ungefragt automatisch ein Dokument gedruckt werden.

Wo kann man entsprechende Thematik im Netz oder in der Online-Hilfe nachlesen?

Ich habe leider nichts gefunden, vielleicht auch die falschen Stichwörter eingegeben.

Vielen Dank im Voraus für Eure Hinweise :smile:

Grüsse aus Osnabrück,
Hans

Hallo,

in Access gibt es keine automatische Logfunktion.

Solches müßte man selber programmieren und auf Formularbasis eine Funktion beim Form-BeforeUpdate-Ereignis aufrufen, die die Eigenschaften „Oldvalue“ und „Value“ aller relevanten Textfelder vergleicht und bei einem Unterschied diese und andere Werte in eine Tabelle ablegt.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Gemeinde,

Hallo Pfarrer,

ich möchte die Änderungen einer im Netzwerk befindlichen
Access Tabelle dokumentieren.

du möchtest die Änderungen einer Tabelle einer im Netzwerk befindlichen Access-Datenbank dokumentieren?

Die Dokumentation soll lediglich Usernamen, Datum, Uhrzeit und
den betreffenden Datensatz enthalten.

erstelle ein History-Tabelle, wo du diese Daten speicherst

Bei Änderung eines Datensatzes der Tabelle, soll ungefragt
automatisch ein Dokument gedruckt werden.

das ist Papierverschwendung, erstelle eine Historientabelle und/oder erstelle eine PDF.

Wo kann man entsprechende Thematik im Netz oder in der
Online-Hilfe nachlesen?

Thema: Audit / Historie

Ich habe leider nichts gefunden, vielleicht auch die falschen
Stichwörter eingegeben.

vermutlich, hier ein paar Beispiele:
http://allenbrowne.com/AppAudit.html
http://articles.techrepublic.com.com/5100-10878_11-6…
http://forums.devarticles.com/microsoft-access-devel…
http://groups.google.de/group/microsoft.public.de.ac…

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Gemeinde,

Hallo Pfarrer,

Hallo Wolfgang,

ich bein Pfarrer, vielleicht ein Schaf :wink: … Mähhh

Danke für Deine Links, ich werde mich da Mittwoch hinein vertiefen, auf der Arbeit, da ich zu Hause kein MS-Office Paket besitze. Auf jeden Fall liest es sich sehr viel versprechend.

Grüsse aus Osnabrück,
Hans

Bei Änderung eines Datensatzes der Tabelle, soll ungefragt
automatisch ein Dokument gedruckt werden.

das ist Papierverschwendung, erstelle eine Historientabelle
und/oder erstelle eine PDF.

PS: Ist nicht meinerseits aber ausdrücklich intern erwünscht.

Hallo Wolfgang,

http://articles.techrepublic.com.com/5100-10878_11-6…

ich bin diesem Link gefolgt.

Funktioniert so weit ganz gut.

Nun möchte ich jedoch zu den dokumentierten Feldern noch ein paar Stammdaten des Kunden aus meiner Tabelle hinzufügen.

ZB den Firmennamen aus dem Feld FIRMA meiner Tabelle. Das Feld in der Audit Tabelle heisst AuditFIRMA und ist als letztes Feld hinzugefügt.

Folgenden Code habe ich im Standard Modul ergänzt.

Dim strFIRMA As String 'vor der Schleife

strFIRMA = .FIRMA 'als letzte Bedingung in IF THEN eingefügt

AuditFIRMA 'als letztes in INSERT INTO eingefügt (existiert auch in der Audit Tabelle)

& cDQ & frm.RecordSource & cDQ & ", " _
& cDQ & .FIRMA & cDQ & " 'als letzten VALUE eingefügt.

Nun erhalte ich ständig die Fehlermeldung:
Objekt unterstützt diese Eigenschaft oder Methode nicht
Fehlernummer: 438

Und es erfolgt kein Eintrag mehr in die Audit Tabelle, jedoch eine Änderung in meiner Ursprungstabelle.

Was habe ich falsch gemacht und was muss ich ändern oder ergänzen?

Grüsse aus Osnabrück,
Hans

Hallo Hans,

Was habe ich falsch gemacht und was muss ich ändern oder ergänzen?

Ich übersetze mal:

For Each ctl In frm.Controls
= für jedes Feld auf deinem Formular, tue folgendes …

With ctl
= mit dem Feld das nach dem Punkt folgt…

Der Fehler liegt vermutlich daran, dass das Feld [Firma] auf dem Formular nicht existiert!?

eine extra Dim - Anweisung ist für das Feld daher auch nicht nötig, da ja automatisch ALLE Felder des Formulars durchgearbeitet werden.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

Der Fehler liegt vermutlich daran, dass das Feld [Firma] auf
dem Formular nicht existiert!?

eine extra Dim - Anweisung ist für das Feld daher auch nicht
nötig, da ja automatisch ALLE Felder des Formulars
durchgearbeitet werden.

Ich habe das Formular mit dem Wizard erstellt und alle Felder der Tabelle einfügen lassen, die damit auch automatisch änderbar sind, weil nirgends ein Schreibschutz besteht.

Ohne eine Änderung im Script, so wie es im Link vorgeschlagen ist, funktioniert es auch.

Die Fehlermeldung kommt nur, wenn ich ein weiteres Feld der Tabelle mit ins Audit nehmen möchte, ohne dort eine Änderung vollzogen zu haben.

Meine Vermutung liegt darin, dass das betreffende Feld der Tabelle per SQL nicht korrekt referenzierd wird. Leider habe ich dafür keine Lösung gefunden.

Vielleicht sehe ich das auch falsch und das Problem liegt woanders?

Grüsse aus Osnabrück,
Hans

Hallo Wolfgang,

ich habe die Dim-Anweisung entfernt, sowie

„strFIRMA = .FIRMA 'als letzte Bedingung in IF THEN eingefügt“

entfernt

der SQL String sieht wie folgt aus:

strSQL = "INSERT INTO " _
& "Audit (EditDate, User, RecordID, SourceTable, " _
& " SourceField, BeforeValue, AfterValue, AuditFirma) " _
& „VALUES (Now(),“ _
& cDQ & Environ(„username“) & cDQ & ", " _
& cDQ & recordid.Value & cDQ & ", " _
& cDQ & frm.RecordSource & cDQ & ", " _
& cDQ & .NAME & cDQ & ", " _
& cDQ & varBefore & cDQ & ", " _
& cDQ & varAfter & cDQ & ", " _
& cDQ & .FIRMA & cDQ & „)“

Ich erhalte immernoch die gleiche Fehlermeldung.

Grüsse aus Osnabrück,
Hans

Hallo Hans,

mit den HTML-Tags kannst du es hier besser darstellen:
(Hilfe dazu findest du im grauen Kasten unter dem Editierfenster)

> strSQL = "INSERT INTO " \_  
> & "Audit (EditDate, User, RecordID, SourceTable, "  
> \_  
> & " SourceField, BeforeValue, AfterValue,  
> AuditFirma) " \_  
> & "VALUES (Now()," \_  
> & cDQ & Environ("username") & cDQ & ", " \_  
> & cDQ & recordid.Value & cDQ & ", " \_  
> & cDQ & frm.RecordSource & cDQ & ", " \_  
> & cDQ & .NAME & cDQ & ", " \_  
> & cDQ & varBefore & cDQ & ", " \_  
> & cDQ & varAfter & cDQ & ", " \_  
> & cDQ & .FIRMA & cDQ & ")"

Ich erhalte immernoch die gleiche Fehlermeldung.

jetzt, bei dieser Darstellung fällt es mir wie Schuppen von den Augen:

die & Zeichen gehören vor den _ in der Zeile

„VALUES (Now(),“ & _

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

die & Zeichen gehören vor den _ in der Zeile

„VALUES (Now(),“ & _

das habe ich gemacht.

 strSQL = "INSERT INTO " \_
 & "Audit (EditDate, User, RecordID, SourceTable, " \_
 & " SourceField, BeforeValue, AfterValue, AuditFIRMA) " \_
 & "VALUES (Now()," & \_
 cDQ & Environ("username") & cDQ & ", " & \_
 cDQ & recordid.Value & cDQ & ", " & \_
 cDQ & frm.RecordSource & cDQ & ", " & \_
 cDQ & .NAME & cDQ & ", " & \_
 cDQ & varBefore & cDQ & ", " & \_
 cDQ & varAfter & cDQ & ", " & \_
 cDQ & .FIRMA & cDQ & ")"

Es erscheint immernoch die gleiche Fehlermeldung.

Vielleicht liegt es daran, dass in der zu überwachenden Tabelle im Feld ‚Firma‘ nichts geändert wurde?

Grüsse aus Osnabrück,
Hans

Im aufrufenden Formular in der Call Anweisung gewünschte Felder mitübergeben, bspw. für das Feld Firma:

Call AuditTrail(Me, MitgliederID, FIRMA())

in der Sub Anweisung bleibt der String ‚strSQL‘ so wie in meiner vorherigen Antwort.

Danke noch mal an Wolfgang aus Lübeck für den Link.

Grüsse aus Osnabrück,
Hans