Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Databasede hangi satırda değişiklik yapıldı.
#1
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;
Cevapla
#2
(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...


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
Cevapla
#3
İ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;
Cevapla
#4
(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:
@ID int
  şeklinde bi değişken tanımlayıp devamında 

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


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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  string icinde alt satirda goster koduyla beraber nasil gonderilir sadikacar60 4 1.077 09-09-2024, Saat: 08:42
Son Yorum: damert6
  Nesnelerde değişiklik yapıldığında erişim problemi nehirnnn 2 614 14-08-2024, Saat: 11:19
Son Yorum: shooterman
  Kapandı : group by ile gruplanmış sorgu sonucunu tek satırda gösterme cinarbil 10 1.615 16-07-2024, Saat: 17:16
Son Yorum: cinarbil
  Hangi Delphi Sürümünü Kullanıyorsunuz? RAD Coder 1 1.039 03-07-2024, Saat: 19:22
Son Yorum: gbg
  Hangi bileşen tıklandı Aktolgali 8 4.116 10-08-2022, Saat: 22:56
Son Yorum: Aktolgali



Konuyu Okuyanlar: 1 Ziyaretçi