Audittrail/ id zuweisen

hallo gemeinde,

wie sollte es sonst sein ich hab mal wieder ne frage an alle.
Habe einen audittrail gefunden und umgeändert und funktioniert blendend jedoch würde ich gerne haben, dass er mir auch noch die id des datensatzes und den formularname angibt.

Option Compare Database
Option Explicit

Private Sub Delete_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
End Sub

Private Sub Ende_Click()
DoCmd.Quit
End Sub
Private Sub RecordChanges(DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String, AdressID As String

’ dies ist nur ein Beispiel - speziell die Handhabung der NULL-Werte kann man
’ natürlich auch ganz anders gestalten!

For Each C In Me.Controls
T = „“
On Error Resume Next
T = C.ControlSource
On Error GoTo 0
If T „“ Then
If DeleteRecord Then
FO = Left(Nz(C.Value, „“), 255)
If FO = „“ Then
FO = „“
FN = „“
Else
FN = „“
End If
Else
FO = Left(Nz(C.OldValue, „“), 255)
If FO = „“ Then FO = „“
FN = Left(Nz(C.Value, „“), 255)
If FN = „“ Then FN = „“
End If
If FN FO Then
CurrentDb.Execute „INSERT INTO tblAuditTrail (FieldName, OldValue, NewValue, DateOfChange, user) " & _
" VALUES (’“ & C.Name & „’,’“ & FO & „’,’“ & FN & „’,Now(),’“ & CurrentUser & „’)“
End If
End If
Next C
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges True
End Sub

Private Sub ShowAT_Click()
DoCmd.OpenForm „frmAuditTrail“
End Sub

Private Sub Speichern_Click()
DoCmd.RunCommand acCmdSaveRecord
End Sub

danke im voraus

Hallo,

etwa so:

Option Compare Database
Option Explicit

Private Sub Delete_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
End Sub

Private Sub Ende_Click()
DoCmd.Quit
End Sub
Private Sub RecordChanges(Frm As Form, IDField as String, DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String
AdressID As String

’ dies ist nur ein Beispiel - speziell die Handhabung der
NULL-Werte kann man
’ natürlich auch ganz anders gestalten!

For Each C In Me.Controls
T = „“
On Error Resume Next
T = C.ControlSource
On Error GoTo 0
If T „“ Then
If DeleteRecord Then

ID=Me!

FO = Left(Nz(C.Value, „“), 255)
If FO = „“ Then
FO = „“
FN = „“
Else
FN = „“
End If
Else
FO = Left(Nz(C.OldValue, „“), 255)
If FO = „“ Then FO = „“
FN = Left(Nz(C.Value, „“), 255)
If FN = „“ Then FN = „“
End If
If FN FO Then
CurrentDb.Execute „INSERT INTO tblAuditTrail (FormName,IDValue,FieldName,
OldValue, NewValue, DateOfChange, user) " & _
" VALUES (’“ & Frm.Name & „’,’“ & Frm(IDField).Value & „’,’“ & C.Name & „’,’“ & FO & „’,’“ & FN &
„’,Now(),’“ & CurrentUser & „’)“
End If
End If
Next C
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges Me.Name,„ID“,False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges Me.Name,„ID“,True
End Sub

Private Sub ShowAT_Click()
DoCmd.OpenForm „frmAuditTrail“
End Sub

Private Sub Speichern_Click()
DoCmd.RunCommand acCmdSaveRecord
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

Franz folgender fehler tritt an folgender Stelle auf:

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges Me.Name,„ID“,False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges Me.Name,„ID“,True
End Sub

…Me.Name…wird markiert, ich muss irgendwas übersehen haben. Er mekert und sagt: „fehler beim kopilieren: Typen unverträglich“

Vielen Dank im Voraus für eventuelle Hilfe

Roberto

Hallo,

Franz folgender fehler tritt an folgender Stelle auf:

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges Me.Name,„ID“,False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges Me.Name,„ID“,True
End Sub

…Me.Name…wird markiert, ich muss irgendwas übersehen
haben. Er mekert und sagt: „fehler beim kopilieren: Typen
unverträglich“

Ja, sorry, sollte nur so heißen:

RecordChanges Me,„ID“,False

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

kein Problem mir passieren oft genug so fehler :wink:

Also wenn ich deinen Code so einpflege läut er schon doch in meinet tblaudittrail verändert sich nicht bzw es zeichnet keine änderung auf.

Hier nun der aktuelle Code von dir…

Option Compare Database
Option Explicit

Private Sub Delete_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
End Sub

Private Sub Ende_Click()
DoCmd.Quit
End Sub
Private Sub RecordChanges(Frm As Form, IDField As String, DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String
AdressID As String

For Each C In Me.Controls
T = „“
On Error Resume Next
T = C.ControlSource
On Error GoTo 0
If T „“ Then
If DeleteRecord Then
ID = Me
FO = Left(Nz(C.Value, „“), 255)
If FO = „“ Then
FO = „“
FN = „“
Else
FN = „“
End If
Else
FO = Left(Nz(C.OldValue, „“), 255)
If FO = „“ Then FO = „“
FN = Left(Nz(C.Value, „“), 255)
If FN = „“ Then FN = „“
End If
If FN FO Then
CurrentDb.Execute „INSERT INTO tblAuditTrail (FormName,IDValue,FieldName, OldValue, NewValue, DateOfChange, user) " & _
" VALUES (’“ & Frm.Name & „’,’“ & Frm(IDField).Value & „’,’“ & C.Name & „’,’“ & FO & „’,’“ & FN & „’,Now(),’“ & CurrentUser & „’)“
End If
End If
Next C
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges Me, „ID“, False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges Me, „ID“, True
End Sub

Private Sub ShowAT_Click()
DoCmd.OpenForm „frmAuditTrail“
End Sub

Bei mir heisst die " ID ", „Analyse_ID“ jedoch wenn ich die „ID“ mit meinem Text ändere er au nix!

Mein Code mit Analyse_ID:

Option Compare Database
Option Explicit

Private Sub Delete_Click()
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
End Sub

Private Sub Ende_Click()
DoCmd.Quit
End Sub
Private Sub RecordChanges(Frm As Form, IDField As String, DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String
AdressID As String

’ dies ist nur ein Beispiel - speziell die Handhabung der
NULL-Werte kann man
’ natürlich auch ganz anders gestalten!

For Each C In Me.Controls
T = „“
On Error Resume Next
T = C.ControlSource
On Error GoTo 0
If T „“ Then
If DeleteRecord Then
ID = Me
FO = Left(Nz(C.Value, „“), 255)
If FO = „“ Then
FO = „“
FN = „“
Else
FN = „“
End If
Else
FO = Left(Nz(C.OldValue, „“), 255)
If FO = „“ Then FO = „“
FN = Left(Nz(C.Value, „“), 255)
If FN = „“ Then FN = „“
End If
If FN FO Then
CurrentDb.Execute „INSERT INTO tblAuditTrail (FormName,IDValue,FieldName, OldValue, NewValue, DateOfChange, user) " & _
" VALUES (’“ & Frm.Name & „’,’“ & Frm(IDField).Value & „’,’“ & C.Name & „’,’“ & FO & „’,’“ & FN & „’,Now(),’“ & CurrentUser & „’)“
End If
End If
Next C
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
RecordChanges Me, „ID“, False
End Sub

Private Sub Form_Delete(Cancel As Integer)
RecordChanges Me, „ID“, True
End Sub

Private Sub ShowAT_Click()
DoCmd.OpenForm „frmAuditTrail“
End Sub

Franz, noch ne Frage!!! Du bist voll Aktiv in diesem Forum machst du das Hauptberuflich???

Finde ich echt gut und das Forum sowieso.

Gruss Roberto

Hallo,

hast Du denn auch die Tabelle um die nötigen Felder erweitert? Habe das nicht explizit geschrieben…

Hauptberuflich: Naja, schön wäre es, wenn ich damit was verdienen könnte :wink:

Beschäftige mich zwar eigenberuflich mit diesem „DB-Kram“, aber meine Beiträge passieren hier eher nebenbei …

mfg

Hallo,

hast Du denn auch die Tabelle um die nötigen Felder erweitert?
Habe das nicht explizit geschrieben…

Ja habe ich gemach, dass war das erste was ich gemacht habe.
Aber er meckert an dieser stelle:

…AdressID As String…Anweisung außerhelb eines typ-block ungültig

Also egal ob ich AdressID oder AdressAnalyse_ID verwende.

Was soll ich den eigentlich verwenden die Analyse_ID oder die Bezeichnung ID???

Hauptberuflich: Naja, schön wäre es, wenn ich damit was
verdienen könnte :wink:

Beschäftige mich zwar eigenberuflich mit diesem „DB-Kram“,
aber meine Beiträge passieren hier eher nebenbei …

Ok,d.h. Hauptsache es macht spass was?!

Also du u netwolf seid mir sehr behilflich bei meiner dipl.arbeit danke
mfg

Hallo,

ok, hab den Feldnamen überlesen…

RecordChanges Me, „Analyse_ID“, False

Wenn das dann immer noch nicht geht, mußt Du halt debuggen: Hltepunkt an den Anfang des Codes setzen und mit Einzelschritt durchfahren, dabei die Inhalte der Variablen prüfen, ob sie das enthalten, was erwartet wird.

mfg

hi Franz du fleißige Biene :wink:

Kann ich hier das vorherige reseten und wir fangen nochmal an*G*
Also das Debuggen zeitgt mir immere nen fehler an…
Kannst du mir freundlicherweise den Code nochml reinschreiben den ich dir gesendet habe mit der ergenzung der Analys_ID und den ganzen änderungen die im laufe des miteinander schreiben entstanden sind?? Wäre echt Mega cool den ich bin jetzt total durcheinander un weiss nicht mehr wo ich angesetzt hatte und wo nicht!!

Gruss

Hallo,

nee, nee… :wink:

besser sorgen wir (eigentlich Du) für das sukzessive Eliminieren der Fehler.

Insofern kannst Du ja beim ersten Fehler unter Nennungen der Fehlermeldung und der Codezeile nachfragen…

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

He Franz, also nochmal hier an dieser stelle:

Private Sub RecordChanges(Frm As Form, IDField As String, DeleteRecord As Boolean)
Dim C As Control, T As String, FO As String, FN As String
AdressID As String

kommt,fehler bei kopilieren: Anweisung ausserhalb eines typ-blocks ungültig. der felher makiert adressID AS String.

Mh ich weiss echt nicht…tip vom profi?

Hallo,

das muß auch so lauten:

Dim C As Control, T As String, FO As String, FN As String, AdressID As String

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Guten Morgen Franz,

vielen Dank hat geklappt LOL…

jetzt kann ich ein paar Daten einpflegen und du kannst dich von dem Stress erholen *G*

Komme dann demnächst wieder mit neuen fragel :wink:

Gruss roberto