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
  Rest Hata Yakalama m_ekici 9 1.458 08-03-2024, Saat: 19:30
Son Yorum: aegean
Wink unigui ile yapılan projeyi yayınlamak cvheneburi 2 531 16-05-2023, Saat: 21:11
Son Yorum: ugorkem
  Delphi RIO da THTTPRio.WebNode.BeforePost Değişikliği vkamadan 4 2.727 26-12-2021, Saat: 15:18
Son Yorum: idealist
  Databasede hangi satırda değişiklik yapıldı. HakanY 3 1.015 13-09-2021, Saat: 14:13
Son Yorum: forumcuali
  socket ile haberleşen programın parametrelerini yakalama Javs 5 1.802 18-06-2021, Saat: 20:07
Son Yorum: adelphiforumz



Konuyu Okuyanlar: 1 Ziyaretçi