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
  Delphi ile SQL server bağlantı hatası yakalama Under 20 2.049 21-11-2025, Saat: 15:24
Son Yorum: mrmarman
  Rest Hata Yakalama m_ekici 13 3.936 15-08-2024, Saat: 17:32
Son Yorum: mrmarman
  FDEventAlerter Yakalama Sorunu Kral 1 588 23-05-2024, Saat: 10:18
Son Yorum: Diyojen
Wink unigui ile yapılan projeyi yayınlamak cvheneburi 2 1.111 16-05-2023, Saat: 21:11
Son Yorum: ugorkem
  Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği vkamadan 4 3.987 26-12-2021, Saat: 15:18
Son Yorum: idealist



Konuyu Okuyanlar: 1 Ziyaretçi