Databasede hangi veride değişiklik yapıldı bilgisi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
HakanY
Üye
Mesajlar: 9
Kayıt: 13 Eyl 2021 07:20

Databasede hangi veride değişiklik yapıldı bilgisi

Mesaj gönderen HakanY »

Merhaba;


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


Kod: Tümünü seç

      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;


Örnek:

Kod: Tümünü seç

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;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Databasede hangi veride değişiklik yapıldı bilgisi

Mesaj gönderen freeman35 »

Event alerter ile bunu yapamazsın. Değişiklikleri triger(lar)da ayrı bir tabloya ekleyip, event alerter tetiklendiğinde bu tabloyu kontrol edersin.
Firebird event alert da bir mesaj gönderemezsin. Sadece mesajlar tanımlayıp (register edip) bu tanımlanmışları gönderebilirsin, ve sadece tanımlanmışları dinleyebilirsin.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
HakanY
Üye
Mesajlar: 9
Kayıt: 13 Eyl 2021 07:20

Re: Databasede hangi veride değişiklik yapıldı bilgisi

Mesaj gönderen HakanY »

Anladım teşekkür ederim.

Özetle insert, delete, ve update olduğunu bilgisini alert olarak alabiliyoruz.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Databasede hangi veride değişiklik yapıldı bilgisi

Mesaj gönderen freeman35 »

HakanY yazdı: 14 Eyl 2021 12:06 Anladım teşekkür ederim.

Özetle insert, delete, ve update olduğunu bilgisini alert olarak alabiliyoruz.
Hayır, tam olarak öyle değil.
Firebird de "Post Event" ile bir mesaj atarsın, ilgili client lar bu mesajı algılar. Mesaja anlamı sen verirsin, "insert, delete, ve update" diye şartlandırmayın kendinizi.
Basit bir aklıma gelen örnek: Stored procedure içerisinde, yapılan bir işlemde çıkan sonuç sıfır ve altıysa bir mesaj attırabilirsin, bunu da client tarafında istediğin gibi kullanabilirsin. Mesela sadece depo kullanıcısı, belli bir miktar altına düşen stoklardan haberdar olması gerek, diğer kullanıcıları ilgilendirmez vs vs.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
HakanY
Üye
Mesajlar: 9
Kayıt: 13 Eyl 2021 07:20

Re: Databasede hangi veride değişiklik yapıldı bilgisi

Mesaj gönderen HakanY »

Çok teşekkür ederim bilgi için.
Cevapla