Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: select ergebnis in blob speichern. gehts?

  Alt 6. Mai 2006, 19:51
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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat