[AccessD] Audit Record Changes

Stuart McLachlan stuart at lexacorp.com.pg
Tue Feb 25 17:22:01 CST 2003


On 25 Feb 2003 at 15:29, gregg steinbrenner wrote:

> Every time someone makes a change I keep a copy of the old record in a clone
> table.  An example table would look as follows
> 
> EmpID Name		Address  		Salary  	DateChanged
> 102	Gregg		123 Somewhere	50000		1/1/03
> 102	Gregg		111 Elsewhere	50000		2/2/03
> 102	Greggs	111 Elsewhere 	55000		3/3/03
> 
> I would like to create a query (if possible) or code that would create a
> second table that shows me what field, changed from what, to what, on what
> day as follows...
> 
> Field		Old Value		New Value		DateChanged
> Address	123 Somewhere	111 Elsewhere	2/2/03
> Name		Gregg			Greggs		3/3/03
> Salary	50000			55000			3/3/03
> 
> Any ideas?
> 
> Is it possible to do this without listing every field name in the code?
> 
> Humbly yours,
> 

Something like:

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim ctl As Control
Dim changed As String
For Each ctl In Me.Controls
  ' only check the text boxes and combo boxes on the form
  If Left(ctl.Name, 3) = "txt"  or Left(ctl.Name, 3) =  "cbo" Then
    If ctl.OldValue <> ctl.Value Then 
     call logit(mid$(ctl.Name,4),ctl.OldValue,ctl.Value)
    End If
  End If
Next
End Sub

Sub logit(ControllName As string, OldValue as String, NewValue as String)
Dim strSQL As String
strSQL = "Insert into Audit (FieldChanged,OldValue,NewValue,CDate)"
strSQL = strSQL & "  select '" & FieldChanged & "','" & OldValue & "','"
strSQL = strSQL & NewValue & "',Date()"
DoCmd.SetWarnings False
DoCmd.RunSQL sqlstring
DoCmd.SetWarnings True
End Sub




-- 
Stuart McLachlan
Lexacorp Ltd
Application Development,  IT Consultancy
http://www.lexacorp.com.pg




More information about the AccessD mailing list