* Basic audit-trail function * (Sample, for the article) Function MyAudit(tcTriggerType) Local lnField, lcFieldName, lcTable, lcUserName, lcChanges If Type("gcUserName") = "C" && if public variable for the user has been declared lcUserName = gcUserName Else lcUserName = "???" Endif lcTable = Juststem(Dbf()) lcChanges = "" Do Case Case tcTriggerType = "D" * nothing is required here, unless you want to * save oldval(...) for each field * (in case the user made changes, and then deleted the record) Case tcTriggerType = "I" For lnField = 1 To Fcount() lcFieldName = Field(lnField) lcChanges = lcChanges + lcFieldName + ": "; + Transform(Eval(lcFieldName)); + Chr(13) + Chr(10) Next Case tcTriggerType = "U" For lnField = 1 To Fcount() lcFieldName = Field(lnField) lcChanges = lcChanges + lcFieldName + ": "; + Transform(Oldval(lcFieldName)) + " -> "; + Transform(Eval(lcFieldName)); + Chr(13) + Chr(10) Next Endcase Insert Into MyAudit; (TableName, UserName, TrigType, WhenChang, Changes,Date); values; (lcTable, lcUserName, tcTriggerType, Datetime(), lcChanges,Date()) Endfunc