Probleme Bei Audit/History

Hallo Leute ich bin es schon wieder*G*,

habe eine History/Audit tabelle mit Code erstellt.

  1. Kann mir jmd. sagen wieso diese nur etw. notiert wenn ich was abändere und nicht direkt wenn ich was neues eingebe???

  2. Der verwendete Code ruft immer --> „Environ(„Username“)“ ab und trägt dieses in meine Audit tabelle ein. Gibt es einen anderen Beug der mir den aktuellen DB User abfrägt(User angemeldet uber access Benutzerkonto)

Gruss Rob

Hallo,

habe eine History/Audit tabelle mit Code erstellt.

gut, aber vermutlich meinst Du, daß Du die schon erstellte Tabelle mit Daten fütterst…

  1. Kann mir jmd. sagen wieso diese nur etw. notiert wenn ich
    was abändere und nicht direkt wenn ich was neues eingebe???

Nein. Vermuten kann man aber, daß der „History“-Code im falschen Ereignis aufgerufen wird, bzw. ein Aufruf im nötigen Ereignis fehlt.

  1. Der verwendete Code ruft immer --> „Environ(„Username“)“ ab
    und trägt dieses in meine Audit tabelle ein. Gibt es einen
    anderen Beug der mir den aktuellen DB User abfrägt(User
    angemeldet uber access Benutzerkonto)

—> Currentuser()

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Rob,

habe eine History/Audit tabelle mit Code erstellt.

welcher Code?

  1. Kann mir jmd. sagen wieso diese nur etw. notiert wenn ich
    was abändere und nicht direkt wenn ich was neues eingebe???

nein, da ich den Code nicht kenne, und meine Glaskugel z.Z. zum polieren ist. Der befreundete Hellseher, der sich mit Datenbanken auskennt ist auch im Urlaub ;-(

Gibt es einen anderen Beug der mir den aktuellen DB User abfrägt(User
angemeldet uber access Benutzerkonto)

Tipp:

  • VBA-Editor starten
  • [F1]
  • suchen nach -> currentuser

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

Hallo Rob,

habe eine History/Audit tabelle mit Code erstellt.

Ich weiss ich geh dir möglicherweise auf die nerven doch ich danke dir für deine geduld:wink:

welcher Code?

Option Compare Database

Const cDQ As String = „“""

Sub AuditTrail(frm As Form, recordid As Control)
'Track changes to data.
'recordid identifies the pk field’s corresponding
'control in frm, in order to id record.
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
'Get changed values.
For Each ctl In frm.Controls
With ctl
'Avoid labels and other controls with Value property.
If .ControlType = acTextBox Then
If .Value .OldValue Then
varBefore = .OldValue
varAfter = .Value
strControlName = .Name
'Build INSERT INTO statement.
strSQL = "INSERT INTO " _
& "Audit (EditDate, User, RecordID, SourceTable, " _
& " SourceField, BeforeValue, AfterValue) " _
& „VALUES (Now(),“ _
& cDQ & Environ(„username“) & cDQ & ", " _
& cDQ & recordid.Value & cDQ & ", " _
& cDQ & frm.RecordSource & cDQ & ", " _
& cDQ & .Name & cDQ & ", " _
& cDQ & varBefore & cDQ & ", " _
& cDQ & varAfter & cDQ & „)“
'View evaluated statement in Immediate window.
Debug.Print strSQL
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
End With
Next
Set ctl = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Description & vbNewLine _
& Err.Number, vbOKOnly, „Error“
End Sub

soll ich hier einfach das username mit currentuser ersetzen???

& cDQ & Environ(„username“) & cDQ & ", " _

emmm ja, wi sollte ich es umprog. das er nicht nur die änderungen wahrnimmt sondern auch den ersten eintrag den ich mache???

Gute NACHT*G*

Hallo,

habe eine History/Audit tabelle mit Code erstellt.

gut, aber vermutlich meinst Du, daß Du die schon erstellte
Tabelle mit Daten fütterst…

  1. Kann mir jmd. sagen wieso diese nur etw. notiert wenn ich
    was abändere und nicht direkt wenn ich was neues eingebe???

Nein. Vermuten kann man aber, daß der „History“-Code im
falschen Ereignis aufgerufen wird, bzw. ein Aufruf im nötigen
Ereignis fehlt.

das ist der code:

Option Compare Database

Const cDQ As String = „“""

Sub AuditTrail(frm As Form, recordid As Control)
'Track changes to data.
'recordid identifies the pk field’s corresponding
'control in frm, in order to id record.
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
'Get changed values.
For Each ctl In frm.Controls
With ctl
'Avoid labels and other controls with Value property.
If .ControlType = acTextBox Then
If .Value .OldValue Then
varBefore = .OldValue
varAfter = .Value
strControlName = .Name
'Build INSERT INTO statement.
strSQL = "INSERT INTO " _
& "Audit (EditDate, User, RecordID, SourceTable, " _
& " SourceField, BeforeValue, AfterValue) " _
& „VALUES (Now(),“ _
& cDQ & Environ(„username“) & cDQ & ", " _
& cDQ & recordid.Value & cDQ & ", " _
& cDQ & frm.RecordSource & cDQ & ", " _
& cDQ & .Name & cDQ & ", " _
& cDQ & varBefore & cDQ & ", " _
& cDQ & varAfter & cDQ & „)“
'View evaluated statement in Immediate window.
Debug.Print strSQL
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
End With

Next
Set ctl = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Description & vbNewLine _
& Err.Number, vbOKOnly, „Error“
End Sub

mhhh was soll ich ändern das er auch schon den ersten eintrag als änderung wahrnimmt und den user anzeigt der es eingepflegt hat?

Sorry wenn ich stresse

gruss robbi

Hallo Rob,

Ich weiss ich geh dir möglicherweise auf die nerven doch ich
danke dir für deine geduld:wink:

du gehst nicht auf die Nerven, du bedenkst nur nicht, dass wir hier „blind“ sind. Wenn du von etwas sprichst, was du auf deinem PC hast, können wir das hier nicht sehen. Je mehr Informationen du von vornherein gibst, desto weniger Rückfragen kommen und desto eher kann dir geholfen werden.

Wenn man dir immer wieder die Informationen aus der Nase ziehen muss, macht es irgendwann keinen Spaß mehr und man fragt/antwortet einfach gar nicht mehr.

mit den HTML-Tags (siehe unten) kann man einen Code auch „schön“ darstellen:

> Option Compare Database  
>   
> Const cDQ As String = """"  
>   
> Sub AuditTrail(frm As Form, recordid As Control)  
> 'Track changes to data.  
> 'recordid identifies the pk field's corresponding  
> 'control in frm, in order to id record.  
> Dim ctl As Control  
> Dim varBefore As Variant  
> Dim varAfter As Variant  
> Dim strControlName As String  
> Dim strSQL As String  
> On Error GoTo ErrHandler  
> 'Get changed values.  
> For Each ctl In frm.Controls  
> With ctl  
> 'Avoid labels and other controls with Value property.  
> If .ControlType = acTextBox Then  
> If .Value .OldValue Then  
> varBefore = .OldValue  
> varAfter = .Value  
> strControlName = .Name  
> 'Build INSERT INTO statement.  
> strSQL = "INSERT INTO " \_  
> & "Audit (EditDate, User, RecordID, SourceTable, "  
> \_  
> & " SourceField, BeforeValue, AfterValue) " \_  
> & "VALUES (Now()," \_  
> & cDQ & Environ("username") & cDQ & ", " \_  
> & cDQ & recordid.Value & cDQ & ", " \_  
> & cDQ & frm.RecordSource & cDQ & ", " \_  
> & cDQ & .Name & cDQ & ", " \_  
> & cDQ & varBefore & cDQ & ", " \_  
> & cDQ & varAfter & cDQ & ")"  
> 'View evaluated statement in Immediate window.  
> Debug.Print strSQL  
> DoCmd.SetWarnings False  
> DoCmd.RunSQL strSQL  
> DoCmd.SetWarnings True  
> End If  
> End If  
> End With  
> Next  
> Set ctl = Nothing  
> Exit Sub  
>   
> ErrHandler:  
> MsgBox Err.Description & vbNewLine \_  
> & Err.Number, vbOKOnly, "Error"  
> End Sub

soll ich hier einfach das username mit currentuser ersetzen???
& cDQ & Environ(„username“) & cDQ & ", " _

Frage: hast du dir dir Hilfe dazu durchgelesen? Hast du für dich beschlossen, das die gelieferten Daten die richtigen sind?
Warum hast du es nicht einfach mal getestet?

emmm ja, wi sollte ich es umprog. das er nicht nur die
änderungen wahrnimmt sondern auch den ersten eintrag den ich
mache???

schau dir den Code an. Es wird nur auf Änderung in den Feldern geprüft. Wenn du also RECORDNEW abfragen willst, baust du eine IF - Bedingung ein, mit neuer INSERT Anweisung, die dann das neue Ereignis ebenfalls in der Historie speichert.

Gute NACHT*G*

dito

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

Morgen Wolfgang,

mit den HTML-Tags (siehe unten) kann man einen Code
auch „schön“ darstellen:

Option Compare Database

Const cDQ As String = „“""

Sub AuditTrail(frm As Form, recordid As Control)
'Track changes to data.
'recordid identifies the pk field’s corresponding
'control in frm, in order to id record.
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
'Get changed values.
For Each ctl In frm.Controls
With ctl
'Avoid labels and other controls with Value property.
If .ControlType = acTextBox Then
If .Value .OldValue Then
varBefore = .OldValue
varAfter = .Value
strControlName = .Name
'Build INSERT INTO statement.
strSQL = "INSERT INTO " _
& "Audit (EditDate, User, RecordID, SourceTable, "
_
& " SourceField, BeforeValue, AfterValue) " _
& „VALUES (Now(),“ _
& cDQ & currentuser & cDQ & ", " _
& cDQ & recordid.Value & cDQ & ", " _
& cDQ & frm.RecordSource & cDQ & ", " _
& cDQ & .Name & cDQ & ", " _
& cDQ & varBefore & cDQ & ", " _
& cDQ & varAfter & cDQ & „)“
'View evaluated statement in Immediate window.
Debug.Print strSQL
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
End With
Next
Set ctl = Nothing
Exit Sub

ErrHandler:
MsgBox Err.Description & vbNewLine _
& Err.Number, vbOKOnly, „Error“
End Sub

soll ich hier einfach das username mit currentuser ersetzen???
& cDQ & Environ(„username“) & cDQ & ", " _

Frage: hast du dir dir Hilfe dazu durchgelesen? Hast du für
dich beschlossen, das die gelieferten Daten die richtigen
sind?
Warum hast du es nicht einfach mal getestet?

Also ich habe es getestet und hab auch meinen fehler gefunden, ich hatte immer das environ vorne dran stehen und den currentuser in klammern und das konnte ja nicht funktionieren LOL

schau dir den Code an. Es wird nur auf Änderung in den Feldern
geprüft. Wenn du also RECORDNEW abfragen willst, baust du eine
IF - Bedingung ein, mit neuer INSERT Anweisung, die dann das
neue Ereignis ebenfalls in der Historie speichert.

Mit der If schleife tu ich mich noch schwer und zwar an welche stelle sie hin kommt und wie sie geschrieben wird :frowning:

Gruss aus dem süden deutschlands