Delphi Can
Databasede hangi satırda değişiklik yapıldı. - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Databasede hangi satırda değişiklik yapıldı. (/showthread.php?tid=6271)



Databasede hangi satırda değişiklik yapıldı. - HakanY - 11-09-2021

Merhaba, @ozcanm paylaşmış olduğu örnek üzerinden;


Create ederek firebird database oluşturuyorum ve bu databasede Trigger kullanıyorum. Herhangi bir kullanıcı Insert, delete veya update yaptığında uyarı alıyorum.
Hangi satırda değişiklik yapıldığını nasıl bulabilirm?

Örnek: ID numarası 14 olan, ROW, TITLE RESIM veya DURUM alannında değişiklik oldu gibi


      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add('CREATE TABLE RESIM (');
      FDQuery.SQL.Add('ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL');
      FDQuery.SQL.Add(', ROW INTEGER');
      FDQuery.SQL.Add(', TITLE VARCHAR(255)');
      FDQuery.SQL.Add(', LINK VARCHAR(255)');
      FDQuery.SQL.Add(', RESIM VARCHAR(255)');
      FDQuery.SQL.Add(', DURUM INTEGER');
      FDQuery.SQL.Add(', PRIMARY KEY(ID)');
      FDQuery.SQL.Add(');');
      FDQuery.ExecSQL;



  
     
    { ---TRIGGER--- }
      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add(' create SEQUENCE GEN_RESIM_ID ');
      FDQuery.ExecSQL;

      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add(' create trigger RESIMLER_ea for LOGO ');
      FDQuery.SQL.Add(' active after insert or update or delete position 0 ');
      FDQuery.SQL.Add(' as ');
      FDQuery.SQL.Add(' begin ');
      FDQuery.SQL.Add(' post_event ''HAREKET_VAR''; ');
      FDQuery.SQL.Add(' end ');
      FDQuery.ExecSQL;




procedure TMainForm.FDEventAlerterAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
  caption := 'Bilgilerde değişiklik oldu!';
end;



Cvp: Databasede hangi satırda değişiklik yapıldı. - forumcuali - 13-09-2021

(11-09-2021, Saat: 16:30)HakanY Adlı Kullanıcıdan Alıntı: Merhaba, @ozcanm paylaşmış olduğu örnek üzerinden;


Create ederek firebird database oluşturuyorum ve bu databasede Trigger kullanıyorum. Herhangi bir kullanıcı Insert, delete veya update yaptığında uyarı alıyorum.
Hangi satırda değişiklik yapıldığını nasıl bulabilirm?

Örnek: ID numarası 14 olan, ROW, TITLE RESIM veya DURUM alannında değişiklik oldu gibi


      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add('CREATE TABLE RESIM (');
      FDQuery.SQL.Add('ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL');
      FDQuery.SQL.Add(', ROW INTEGER');
      FDQuery.SQL.Add(', TITLE VARCHAR(255)');
      FDQuery.SQL.Add(', LINK VARCHAR(255)');
      FDQuery.SQL.Add(', RESIM VARCHAR(255)');
      FDQuery.SQL.Add(', DURUM INTEGER');
      FDQuery.SQL.Add(', PRIMARY KEY(ID)');
      FDQuery.SQL.Add(');');
      FDQuery.ExecSQL;



  
     
    { ---TRIGGER--- }
      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add(' create SEQUENCE GEN_RESIM_ID ');
      FDQuery.ExecSQL;

      FDQuery.Active := False;
      FDQuery.Close;
      FDQuery.SQL.Clear;
      FDQuery.SQL.Add(' create trigger RESIMLER_ea for LOGO ');
      FDQuery.SQL.Add(' active after insert or update or delete position 0 ');
      FDQuery.SQL.Add(' as ');
      FDQuery.SQL.Add(' begin ');
      FDQuery.SQL.Add(' post_event ''HAREKET_VAR''; ');
      FDQuery.SQL.Add(' end ');
      FDQuery.ExecSQL;




procedure TMainForm.FDEventAlerterAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
  caption := 'Bilgilerde değişiklik oldu!';
end;

İnternet üzerinden benzer bişey araştırırken şöyle bi koda denk geldim benim işimi gördü sanırım sana da çözüm olur...


Kod:
create trigger tr_silinenmusteri on musteriler
After delete
As
Begin
Declare @ID int
Declare @ad varchar(50)
Declare @soyad varchar(50)
Declare @sehir varchar(50)
Select @ID=Musteri_ID from deleted
Select @ad=Musteri_Ad from deleted
Select @soyad=Musteri_Soyad from deleted
Select @sehir=Musteri_Sehir from deleted
Insert into silinenmusteri values(@ID,@ad,@soyad,@sehir)
End



Databasede hangi satırda değişiklik yapıldı. - HakanY - 13-09-2021

İlginize teşekkürler;


İnternette benzeri kodlara bende çok baktım. ama işimi çözebileceğim örnek kod bolamadım.
Yada ben trigger olayını ben çok yanlış anladım.


Örnek:

procedure TMainForm.FDEventAlerterAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
showmessage(150. id'e değişiklik oldu) bu şekilde herhangi bir veride değişiklik yapılınca bu verinin idsini nasıl alırım?
end;



Cvp: Databasede hangi satırda değişiklik yapıldı. - forumcuali - 13-09-2021

(13-09-2021, Saat: 13:44)HakanY Adlı Kullanıcıdan Alıntı: İlginize teşekkürler;


İnternette benzeri kodlara bende çok baktım. ama işimi çözebileceğim örnek kod bolamadım.
Yada ben trigger olayını ben çok yanlış anladım.


Örnek:

procedure TMainForm.FDEventAlerterAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
showmessage(150. id'e değişiklik oldu) bu şekilde herhangi bir veride değişiklik yapılınca bu verinin idsini nasıl alırım?
end;

görügüm kadarı ile ' ID ' diye bi alanın var

bu alan için:
Kod:
@ID int
  şeklinde bi değişken tanımlayıp devamında 

Kod:
SET @ID=ID from deleted
.
.
post_event @ID +'HAREKET_VAR'


şeklinde kodlasan olmuyormu? Denemedim ama olurmu diye mantık yürüttüm