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
  Databasede Yapılan Değişikliği Yakalama HakanY 3 162 16-09-2021, Saat: 01:30
Son Yorum: HakanY
  Databasede anlık değişikliği algılama Nedim 2 592 18-05-2021, Saat: 19:51
Son Yorum: Jakarta2
  Style değişiklik yapma ekank 4 2.097 21-05-2020, Saat: 14:34
Son Yorum: ekank
  Usb aygıtlarını hangi programın kullandığını bulma seci20 4 1.955 20-05-2020, Saat: 02:33
Son Yorum: seci20
Photo cxDBGridTable da Listenen Aynı Satırları Tek Satırda Gösterme Selen 3 1.638 13-02-2020, Saat: 11:36
Son Yorum: Selen



Konuyu Okuyanlar: 1 Ziyaretçi