Database Event Listen Notify ile GUI güncelleme

ixiRx

Forum Üyesi
22 Eyl 2022
795
4
0
Russia
Bazen veri tabanında yapılan güncellemenin o veri tabanına bağlı olan diğer açık uygulamalarda/kullanıcılarda da otomatik olarak güncellenmesini isteriz.

Bu durumda Veri tabanlarında olan event özelliği devreye girer. Farklı veri tabanlarında farklı şekilde isimlendirilir fakat ana mantık aynıdır.

Çalışma mantığı bir tabloda oluşan olaya(INSERT, UPDATE, DELETE) istinaden*RDBMS*tarafında trigger ile*diğer bağlı kullanıcılar(sessions, connection)*için bir bildirim oluşturuyoruz.
Bu işlemden sonra bu bildirimi de diğer kullanıcıların bilgisayarında yakalayarak gerekli güncellemeyi yapıyoruz.

Ben bu testi PostgreSQL 9,5 sürümünde*ve FireDAC ile kullanıyorum.

Öncelikle bir adet trigger tanımlıyoruz. SQL kodu aşağıdadır.
Bu trigger INSERT, UPDATE, DELETE işlemlerinde tablo adı ve etkilenen satırın ID bilgisini ile notification oluşturuyor.

CREATE OR REPLACE FUNCTION public.table_notify()
*RETURNS trigger AS
$BODY$
BEGIN
* --tablo isimlerine göre bildirimler oluşacak ikinci değerde geçerli kaydın id bilgisi
* IF (TG_OP = 'INSERT') THEN
* **PERFORM pg_notify(TG_TABLE_NAME, NEW.id::varchar);
**ELSIF (TG_OP = 'UPDATE') THEN
* **PERFORM pg_notify(TG_TABLE_NAME, OLD.id::varchar);
**ELSIF (TG_OP = 'DELETE') THEN
* **PERFORM pg_notify(TG_TABLE_NAME, '');
**END IF;
* RETURN NEW;
END;$BODY$
*LANGUAGE plpgsql VOLATILE SECURITY DEFINER
*COST 100;
ALTER FUNCTION public.table_notify()
*OWNER TO postgres;
GRANT EXECUTE ON FUNCTION public.table_notify() TO public;
REVOKE ALL ON FUNCTION public.table_notify() FROM postgres;

Bu oluşturduğumuz trigger hangi tablolarda çalışacaksa tablolar*için*triggeri tanımlıyoruz.
CREATE TRIGGER x_table_notify
*AFTER INSERT OR UPDATE OR DELETE
*ON public.ornek_tablo_adi
*FOR EACH ROW
*EXECUTE PROCEDURE public.table_notify();
Bu işlemden sonra veri tabanındaki bildirim mekanizması bitiyor. Sonraki adımda da GUI kullanıcı tarafında bu oluşan bildirimleri yakalayıp işlemek gerekiyor
Basitçe anlamanız adına*

TFDEventAlerter -> buradaki firedac bileşenine doğru bilgileri yazarak bildirimi yakalayacağız.

* FDEventAlerter.Names.Add('stok_karti'); //dinleyeceğiniz bildirimin adını yazın ben trigger içinde TG_TABLE_NAME ile*tablo adını*yazmıştım. Bu nedenle sizde tablo adınızı girmelisiniz.
**FDEventAlerter.Connection := FDConnection;
* FDEventAlerter.Active := True;

procedure TfrmBaseDBGrid.eventAlerterAlert(ASender: TFDCustomEventAlerter;
* const AEventName: string; const AArgument: Variant);
//var
//* n1: Integer;
//* processID: string;
//* recordID: Integer;
begin
//* inherited;
//* if VarIsArray( AArgument ) then
//* * for n1 := VarArrayLowBound(AArgument, 1) to VarArrayHighBound(AArgument, 1) do
//* * * if n1 = 0 then
//* * * * processID := VarToStr(AArgument[n1])* //bildirimi oluşturan kullanıcının db üzerindeki process id (pid) bilgisi
//* * * else if n1 = 1 then
//* * * * recordID := VarToStr(AArgument[n1]).ToInteger; //kaydın id bilgisi
* FDQuery.Refresh; //bu işlem ile query datalarını dolayısıyla bağlı olduğu gridi refresh etmiş oluyoruz.
end;


Firebird için bir kullanıcı bu şekilde güncellemeyi nasıl yaparım diye sormuştu burada da Firebird için anlatım mevcut. Bu şekilde ilerleyerek firebird içinde bu mekanizmayı kurabilirsiniz.



Buyrun buda uygulamanın videosu
 

Genel Forum

Türkçe Forum Siteleri

İnternette bilgi paylaşımı ve tartışma ortamı arayanlar için forum siteleri uzun yıllardır popüler bir tercih olmuştur. Her yaştan ve ilgi alanından kullanıcıya hitap eden genel forum siteleri, teknoloji, oyun, kültür ve daha pek çok konuda geniş içerik sunmaktadır. Bu platformlar, katılımcıların hem öğrenme hem de eğlenceli vakit geçirme ihtiyaçlarını karşılamaktadır.

Genel Forum Sitesi

İnternette Türkçe forumlar üzerinden içerik paylaşmak, dil bariyerini ortadan kaldırarak yerel kültüre uygun bir deneyim sunar. Türkçe forum siteleri, kullanıcıların bilgiye kolayca ulaşabileceği, aynı zamanda sosyal ve eğlenceli paylaşımlar yapabileceği platformlar oluşturur. Türkiye'deki internet kullanıcıları için bu forumlar, ilgi çekici konularda derinlemesine sohbetler sunar.

Genel Forum Siteleri

Günlük hayatın stresinden uzaklaşmak isteyenler için eğlenceli forumlar, keyifli bir alternatif sunar. Farklı hobilere ve ilgi alanlarına yönelik içeriklerle dolu olan bu forum paylaşım siteleri, kullanıcılarına samimi bir ortamda vakit geçirme fırsatı sunarken, aynı zamanda yeni insanlarla tanışma imkanı da sağlar. Eğlenceli paylaşımlar ve interaktif etkinliklerle dolu olan bu platformlar, hem öğrenmeyi hem de keyifli vakit geçirmeyi bir arada sunar.

İnternette yeni bir topluluk arayan ya da bilgi alışverişi yapmak isteyenler için genel forum siteleri harika bir başlangıç noktasıdır. Geniş bir kullanıcı kitlesine hitap eden Türkçe forumlar, herkesin ilgisini çekecek konularla doludur. Siz de bu platformlara katılarak, kendi ilgi alanlarınıza uygun başlıklarda sohbetlere katılabilir ve katkıda bulunabilirsiniz. 

Not : Lütfen Çekim Paylaşım Forumları için sitemizi kullanmayın.

Üst