Interbasein interaktif kullanımı (commit retaining)

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Interbasein interaktif kullanımı (commit retaining)

Mesaj gönderen pentiumkivanc »

Ben bir IB veritabanını oluşturdum ve bu veritabanı ile mesela veritabanı üzerinden mesajlaşma tarzı bir program yapmak istiyorum. Formun üzerine bir adet IBDatabase,
1 adet IBTransaction, 1 adet IBQuery, 1 adet IBUpdateSQL v.s dbcontrol nesnelerini koydum. IBDatabase deki database kısmına veritabanımın adını bağladım. IBTransactionuda veritabanına bağladım. query ve updatesql de tamam ancak bir yeri atladım oda IBTransaction. Bunun ayarlamasını nasıl yapıcam? Yani yeni bir kayıt girilince ağdaki bir başka şahıs serverde değişen bu bilgiyi nasıl görebilir? ve client te değişen bir bilgi serverda nasıl görülür yani program nasıl olurda interaktif (karşılıklı veri alışverişi) yapabilir? Tabi mail programını örnek olarak verdim başka bişey de düşünebiliriz.
Mesela programda afterpost olayına commitretaining yaptık ama diğer kullanıcılar değişikliği nasıl görecekler? Ben istiyorum ki tıpkı mail yollamak gibi birine mesaj attığımda diğer kullanıcı da veritabanına bağlı olduğundan kayıtların sonuna yeni bir kayıt eklendiğini görsün. (otomatik refresh yapsın)
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

şu mantıkla yapabilirsin.
ilk once IBTransactionun izolasyon düzeyini ReadCommited'e ayarla.
(IBTransaction'a çift tıklayarak)

sonra veritabanında tabloların after post olaylarına birer trigger ekle
triggerin kodunda şu satır yer alsın.

post_event 'KayitPostEdildi';

bu komut gdb ye bağlı bütün clientlara bu mesajı gönderir.

IBEvents bileşeniylede bu mesajı yakalar ve gerekli işlemi yaparsın.

procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;
EventCount: Integer; var CancelAlerts: Boolean);
begin
if EventName = 'KayitPostEdildi' Then
ibQuery.Refresh;
end;
Cevapla