Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Databasede Yapılan Değişikliği Yakalama
#1
Merhabalar,

Ana uygulamadan çoklu kullanıcının bağlandığı databaseye triggerı Craeta ederek oluşturdum ve güzelde çalışıyor.
Fakat 2. uygulamadan diğer uygulamadan databasede değişiklik yapıldığını nasıl yakalaya bilirim? bunu çözemedim. yardımlarınızı rica ederim.



      
      try
        FDQuery.Active := False;
        FDQuery.Close;
        FDQuery.SQL.Clear;
        FDQuery.SQL.Add(' CREATE SEQUENCE GEN_RESIMTETIKLE_ID');
        FDQuery.ExecSQL;
      finally
        FDQuery.Close;
      end;
      try
        FDQuery.Active := False;
        FDQuery.Close;
        FDQuery.SQL.Clear;
        FDQuery.SQL.Add('CREATE TRIGGER RESIMTETIKLE FOR RESIM');
        FDQuery.SQL.Add('ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0');
        FDQuery.SQL.Add(' AS');
        FDQuery.SQL.Add(' BEGIN');
        FDQuery.SQL.Add(' IF (INSERTING) THEN');
        FDQuery.SQL.Add(' POST_EVENT ''Insert'';');
        FDQuery.SQL.Add(' ELSE');
        FDQuery.SQL.Add(' IF (UPDATING) THEN');
        FDQuery.SQL.Add(' POST_EVENT ''Update'';');
        FDQuery.SQL.Add(' ELSE ');
        FDQuery.SQL.Add(' POST_EVENT ''Delete'';');
        FDQuery.SQL.Add(' END');
        FDQuery.ExecSQL;
      finally
        FDQuery.Close;
      end;
    end;



procedure TMainForm.FDEventAlerterAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
begin
  if SameText(AEventName, 'Update') then
  begin
    ResimTetikleUpdate(Self);// değişiklik yap
  end;
end;
Cevapla
#2
Çözüm olarak değişiklik olduğunda Ağ'da socket üzerinden mesaj atılabilir
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#3
Kullandığın veri tabanı nedir bilgi vermemişsin.

Ben PostgreSQL için konuşuyorum. 

Size ışık olması adına FDConnection > Parametreler içinde "Application Name" parametresi var. Bu parametreye veri tabanına bağlanan uygulamanın adını giriyoruz. Elma Armut olabilir.
SELECT CURRENT_SETTING('application_name');
 şeklinde bir sorgu gönderirseniz. Aktif bağlantının "Application Name" değerini yani Elma Armut a ulaşabilirsiniz.

Bu bilgiye yani sizin dediğiniz gibi hangi uygulama olduğu bilgisine ulaşabildiğinize göre artık Trigger içinde istediğiniz kontrolü yapabilirsiniz.

Ayrıca FDConnection parametrelerinden değil de sonradan bu uygulama adı ayarını yapmak isterseniz. sorgu olarak 
set application_name to "Elma";
şeklinde kullanım sonrasında isim olarak Elma olacaktır.

Arama sonucunda gördüğüm kadarıyla bu durumun MSSQL içinde geçerli. Fakat kullanımı farklı olabilir.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#4
Teşekkür ederim zaman ayırdığınız için.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Databasede hangi satırda değişiklik yapıldı. HakanY 3 223 13-09-2021, Saat: 14:13
Son Yorum: forumcuali
  socket ile haberleşen programın parametrelerini yakalama Javs 5 570 18-06-2021, Saat: 20:07
Son Yorum: adelphiforumz
  İşlem yakalama Mete 2 373 05-06-2021, Saat: 12:01
Son Yorum: frmman
  Databasede anlık değişikliği algılama Nedim 2 615 18-05-2021, Saat: 19:51
Son Yorum: Jakarta2
  Formun tamamında geçerli mouse sağ click olayı yakalama cinarbil 4 908 07-11-2020, Saat: 20:34
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi