aynı veritabanina baglı farkli programlarin haberlesmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
P206
Kıdemli Üye
Mesajlar: 395
Kayıt: 17 Haz 2003 12:36
Konum: İstanbul

Mesaj gönderen P206 »

Sql Server da Trigger ile bir exe yi çalıştırarak bunu yapabiliriz.
I love my car.
Blog Yaptık
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

ya ben olayı sql server boyutunda değil, firebirdde çözelim derim.
triggerdan tetiklenen bi exenin tabloları kapatıp açması çok mantıklı gelmiyor. 20 makine birden ha bire tabloları kapatıp açarlarsa vay halimize. illaki var daha iyi bir yöntem.
P206
Kıdemli Üye
Mesajlar: 395
Kayıt: 17 Haz 2003 12:36
Konum: İstanbul

Mesaj gönderen P206 »

İyi , köyü yönü kullanılan metoflar bunlar daha iyisini pek sanmıyorum. Firebird de Post_event derim .

İyi Çalışmalar.
I love my car.
Blog Yaptık
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

P206 yazdı:İyi , köyü yönü kullanılan metoflar bunlar daha iyisini pek sanmıyorum. Firebird de Post_event derim .

İyi Çalışmalar.
+100
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

Post_event diye tabir ettiğiniz olayı daha ayrıntılı anlatabilirmisiniz?
yani tableın post eventinden sonra ağ üzerindeki tüm bilgisayarlarda yeni kayıt gözüksün diye tabloyu kapatıp açacakmıyız?
sadece bir tabloyu kapatıp açmak yeterli mi olacak?
yoksa database'i disconnect yapıp tekrar connect mi yapıcaz?
tabi database disconnect olunca tüm tablolar kapanıyor. onları da tekrar açmak lazım olacak?

olayı çok basit bir kodla ifade edelim.
ağ üzerinde çalışan bir program olsun.
iki bilgisayarda da bir dbgrid ekranda gözüküyor olsun.
bilgisayarlardan birinde yeni bir kayıt girildi. diğer bilgisayarın ekranındaki dbgride yeni kayıt hemen yansısın. ( yenile gibi bi tuton olmadan )
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
arkadasim post_event veya ibevents diye arat bakalım bi neler çıkıyor karşına.
fb/ib de trigerlardan tabloya kayıt eklendi diye bi mesaj yollayacaksın. bu mesajı TIBEvents bileşeni ile yakalayıp gerektiğinde tabloyu açıp kapatacaksın.
olay bundan ibaret.

NOT: böyle yazınca kolay göründü. :)
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

aslangeri yazdı: fb/ib de trigerlardan tabloya kayıt eklendi diye bi mesaj yollayacaksın. bu mesajı TIBEvents bileşeni ile yakalayıp gerektiğinde tabloyu açıp kapatacaksın.
Bu işlemi her zaman % 100 başarıyla yapamayabilirsiniz...Kaldı ki eğer önemli bir veriden bahsediliyorsa ve yoğun bir ağ ortamı varsa kilitlenmelere dahi neden olabilecektir..Büyük projelerde genelde "Yenile" butonu koyularak yapılıyor ancak bu, programın esnekliğini kaybetmesine neden oluyor..Ben de ClientSocket ve ServerSocket bileşenleriyle yapılması taraftarıyım..
Saygılarımla.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Clientsocket ve ServerSocket'le problemi çözmek demek ayrı bir program yazmak veya en azından ana bilgisayara bir servis programı veya normal bir program yazmak anlamına geliyor.

Ben böyle bir problemi kullanılan veritabanınından bağımsız olacak şekilde şöyle çözerdim:

Veritabanına bir tablo eklerdim.

Kod: Tümünü seç

CREATE TABLE DEGISENTABLOLAR (
  TABLO_ADI VARCHAR(50) NOT NULL,
  SON_DEGISME_TARIHI TIMESTAMP NOT NULL,
CONSTRAINT PK_DEGISENTABLOLAR PRIMARY KEY (TABLO_ADI));
Önemli gördüğüm tabloların AFTER_UPDATE, AFTER_DELETE, AFTER_INSERT trigger'larına kod yazarak
bu tabloyu update ederdim. (Veritabanıyla fazla uğraşmak istemiyorum derseniz programın içinden de yapabilirsiniz.)

Client programlarında bir timer koyarak birkaç saniyede bir bu tabloyu kontrol ederek değişen tabloları bulup basit bir döngü ile
bütün form ve datamodullerdeki açık tabloları müsaitse (edit modunda falan değilse) refresh ederdim.

İyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Hakan Can yazdı:Clientsocket ve ServerSocket'le problemi çözmek demek ayrı bir program yazmak veya en azından ana bilgisayara bir servis programı veya normal bir program yazmak anlamına geliyor.
Server ya da clientte (design time ilgili bileşenlere default değerler verilmek suretiyle) connect komutunu verip sendmessage ya da receivetext propertylerini işlemek için neden bir program yazmak gerekir sizce?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Ben "Clientsocket ve ServerSocket'le problemi çözmek demek ayrı bir program yazmak veya en azından
ana bilgisayara bir servis programı veya normal bir program yazmak anlamına geliyor." demiştim.

Verdiğiniz cevap veya sorunuz net değil. TServerSocket'i TClientSocket'le aynı program içine mi yazacaksınız?
Kullanıcılar veritabanı ile ilgili zaten program yazıyorlar. Eğer Socketleri kullanacaksanız TClientSocket'i bu
programın içine yerleştirirsiniz. Dediğiniz gibi design time default değerleri verirsiniz vs...
Herhalde TServerSocket'i de tutup aynı program içine yazmazsınız. Yani sonuçta TServerSocket'i yani bütün mesajların
gideceği ve cevapların gönderileceği TServerSocket'i ayrı bir programa (ben şahsen servis programı yazarım) yerleştiririm.
Ve bu program bilgisayar açıldığında otomatik olarak çalışır vs...
Ama derseniz ki ben illa ayrı bir program yazmam inat ettim TClientSocket'le aynı yere yazacağım. Tabi ki yapabilirsiniz...

Bilmiyorum izah edebildim mi?
Şahsen diğer arkadaşların da bu konuda görüşlerini almak isterdim.
Katılıyorlar mı (gülmekten :lol: ) katılmıyorlar mı?

İyi çalışmalar.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hepinize kıymetli fikirleriniz için teşekkür ediyorum.
server program ve client program olmak üzere iki ayrı program yazma olayını (kendi projem için) gereksiz görüyorum. nitekim çok büyük projelerde mükemmel sonuçlar alınabilir. ama benim projem en fazla 20 bilgisayarda çalışacak. timer ile saniyede bir veritabanı yoklama olayını hiç mantıklı bulmuyorum.
sayın P206nın önderdiği ve sayın aslangeri'nin tam not verdiği post_event ve ibevent kontrol methodunu uyguladım. ağı izleyen bir program buldum ve 5 bilgisayarda programı denedim. gerçekten de ağ ortamını hiç kasmadı. sonuçta ağ üzerinden giden sadece bir string o kadar.

Kod: Tümünü seç

post_event=('UPDATE OLDU')
ben bu kadar öneriden kendi payıma post_event ile tetiklenen ibevent altında tableX.refresh; yöktemini seçtim.
emeği geçen herkese teşekkürler.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

aynı toolları diğer veritabanlarında kullanamama ihtimalini de düşünmek gerek...
Cevapla