Einzelnen Beitrag anzeigen

Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#8

Re: TADOTable Anweisungen loggen

  Alt 2. Okt 2003, 00:43
Vorab: wenn ich in die Falsche Richtung gallopiere, dan Bremse anlegen (Stop schreien)

MS-SQL als "richtige" DB hat auch Features wie Trigger und Stored Procedures.

Wenn ich Dich richtig verstanden habe, möchtest Du die abgesetzten (datenändernden) SQL-Commands loggen. Ich unterstelle jetzt mal, Du möchtest das aus Sicherheitsgründen und nicht zum debuggen machen.

Dann könntest Du dies mit Triggern "sauberer" lösen, da diese nicht nur auf SQL-Commands aus Deiner Anwendung sondern auf alle SQL-Commands - egal woher (z.B. Queryanalyser/DbExplorer) - reagieren.

SQL-Code:
create table Daten
(
    idDaten int identity(1,1) not null,
    V_Wert varchar(35) null
    constraint pk_Daten primary key (idDaten)
)
go

create table Log
(
    idLog int identity(1,1) not null,
    V_WertNew varchar(35) null,
    V_WertOld varchar(35) null,
    V_Aktion varchar(10) not null,
    V_Benutzer varchar(255) not null,
    D_Zeitpunkt datetime not null
    constraint pk_Log primary key (idLog)
)
go

create trigger DatenInsertTrigger on Daten for insert as
begin
    declare
      @WertNew varchar(35)
    set @WertNew = select V_Wert from Inserted
    insert Into Log
    (V_WertNew,V_Aktion,V_Benutzer,D_Zeitpunkt)
    VALUES
    (@WertNew,'Insert',SUSER_SNAME(),getdate())
end
go

create trigger DatenUpdateTrigger on Daten for update as
begin
    declare
      @WertNew varchar(35),
      @WertOld varchar(35)

    set @WertNew = select V_Wert from Inserted
    set @WertOld = select V_Wert from Deleted
    insert Into Log
    (V_WertNew,V_WertOld,V_Aktion,V_Benutzer,D_Zeitpunkt)
    VALUES
    (@WertNew,@WertOld,'Update',SUSER_SNAME(),getdate())
end
go

create trigger DatenDeleteTrigger on Daten for delete as
begin
    declare
      @WertOld varchar(35)
    set @WertOld = select V_Wert from Deleted
    insert Into Log
    (V_WertOld,V_Aktion,V_Benutzer,D_Zeitpunkt)
    VALUES
    (@WertOld,'Update',SUSER_SNAME(),getdate())
end
go
Gruß Tim
Tim Leuschner
  Mit Zitat antworten Zitat