Creating an Audit Log of record changes to a database

Chris Kelleher

Administrator
Staff member
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>DEFINE HANDLE h-old-field AS HANDLE.
DEFINE HANDLE h-new-field AS HANDLE.

CREATE BUFFER h-old-buffer FOR TABLE table-expression.
CREATE BUFFER h-new-buffer FOR TABLE table-expression.

REPEAT x = 1 TO h-new-buffer:NUM-FIELDS:

ASSIGN
h-old-field = h-old-buffer:BUFFER-FIELD(x)
h-new-field = h-new-buffer:BUFFER-FIELD(x).

IF h-old-field:BUFFER-VALUE <> h-new-field:BUFFER-VALUE THEN
DO:
CREATE audit_table.
ASSIGN ...
END.
END.

However prior to V9, you can not get at the field values dynamically.
Therefore, however you do it, it must be repeat for each field - as with
log.i

/* prog.p */

BUFFER-COMPARE...

{log.i old-buf new-buf field-one}
{log.i old-buf new-buf field-one}
...

/* log.i */

IF CAN-DO (result-field, "{3}") AND {1}.{3} <> {2}.{3} THEN
DO:
CREATE audit-dable.
ASISGN...
END.

[/code]
 
Top