Zitat von
mojo777:
obwohl ich mir die abläufe schon ganz gut vorstellen kann, wäre ein beispiel super.
Wenn die zu protokollierenden Tabellen eine statische Struktur haben, könntest du einfach die Tabellen per Hand füllen.
Welche Tabellen sollen protokolliert werden -> MetaTables
Welche Felder davon -> MetaFields
Die UserIds ambesten OnDemand über eine SProc Abfragen/Einfügen (gibt es User in MetaUser noch nicht -> anlegen).
beim Trigger würde sowas stehen (Vorsicht habe die PSQL Sytax nicht im Kopf, ist also reiner Pseudocode!)
Delphi-Quellcode:
create trigger Audit$$1 -- Die ID aus MetaFields
before insert or update or delete on ->Tabelle<-
for each row
as
userID integer;
changeType integer;
newValue varchar(XXX);
begin
if inserting and
:New.->FeldName<- is not null then
changeType := 0;
newValue := :New.->FeldName<-;
elsIf updating and
(:New.->FeldName<- is not null or :Old.->FeldName<- is not null) then
if :New.->FeldName<- is null then
changeType := 2;
elsIf :Old.Feld is null then
changeType := 0;
elsIf :New.->FeldName<- != :New.->FeldName<- then
changeType := 1;
end if;
newValue := :New.->FeldName<-;
elsIf deleting and
:Old.->FeldName<- is not null then
changeType := 2;
newValue := null;
end if;
if changeType is not null then
userID := getUser(CurrentUser);-- Die Sproc, die ich oben erwähnte
INSERT INTO AuditLog
(
,Field
,RecordId
,ChangeType
,ChangeDate
,User
,Value)
VALUES
(1 -- Die ID aus MetaFields
,:New.->PrimaryKeyFeldName<-
,changeType
,SysDate
,userId
,newValue);
end if;
end;
Das könntest du dir erstmal einfach aus MetaTables & MetaFields für jedes aktive Feld generieren lassen.
Falls ich die alte
DB nicht mehr finden sollte, kann ich ja mal schauen ob ich es aus dem Kopf zusammenkriege (ich habe seeehr selten mit
FB zu tun
)
edit: hatte den PK des Datensatzes vergessen, sowas passiert wenn man sich irgendwelchen kranken Käsen aus den fingern saugt.