İnterbaseye aynı anda birden fazla kişinin veri girebilmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

İnterbaseye aynı anda birden fazla kişinin veri girebilmesi

Mesaj gönderen ertline »

Mrb Arkadaşlar.
Interbase veritabanı ile bir program yaptım.Programı ağda aynı anda 3 yada 4 kullanıcı kullanacak.Aynı anda aynı tabloya veri girebilmeleri gerekli.Şöyle bir sorun var:
bir kullanıcı veri girdiğinde diğer kullanıcı bu veriyi programı kapatıp açtıktan sonra görebiliyor ve aynı anda 2 kullanıcı işlem yapamıyor.Siteden arattırdım ve makaleyi de okudum(Interbase'i Çok Kullanıcılı (MultiUser) Kullanmak) ama o şekilde yapınca söylediğim problem oluyor.Bunu nasıl yapabilirim.

Her zaman old. gibi engin bilgi ve yanıtlarınızı bekliyorum.
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

ibevent ile yeni kayıt girildiğinde bir tetikleme yapılmasını sağla ve eğer

ibdataset.state=dsBrowse//Yani dataset gözatma modunda ise

tabloyu kapatıp aç.Böylece yeni kayıtlar gelmiş olacak.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

- Veriyi aynı anda girebilir.
- Ancak aynı kayıt üzerinde çalışamazlar!
- Birbirlerinin yaptıkları değişiklikleri ancak Commit ederlerse görebilirler.
- Commit ten sonra Tablo kapanacağından yeniden açman gerekir.
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

Coderlord Commit derken tam olarak ne yapmalıyım datasetin afterpost undan sonra ben şunu yapıyorum:

hastakayit.ApplyUpdates;
atm_tr.CommitRetaining;

Bundan başka bir şey gerekli mi?
Tablo benim yukarda yazdığım işlemden sonra kapanır mı?
Kapanırsa ibquery1.open; şeklinde yazmam yeterli olur mu?

Kusura bakmayın çok sordum ama
program hazır hatta kurdum fakat bu sorun kafama çok takıldı.
örnekle açıklarsanız çok sevineceğim...
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

atm_tr.CommitRetaining;
yerine
atm_tr.Commit; diyorsunuz..

ama tabloyu yeniden açmak gerekir..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
okurtdiken
Üye
Mesajlar: 21
Kayıt: 11 May 2004 01:02
Konum: ankara
İletişim:

Mesaj gönderen okurtdiken »

s.a.
eğer commit kullanırsanız tabloyu yeniden açmanız gerekir,
commitretaining kullanırsanız tablolar kapanmadan commit işlemi yapılır ve tekrar açmanıza gerek kalmaz.

Sizin probleminiz
eğer IBX bileşenleri kullanıyorsanız kullandığınız transaction nesnesinin params özelleğinde
read_committed
rec_version
nowait

ifadelerinin yazılı olması gerekiyor. (bu ifadeleri transaction üzerinde sağ clickleyip Transaction Editor'e girip Read Commited ifadesini seçerek de yazabilirsiniz)
Bu durumda bir kullanıcı kaydı girdiğinde diğer kullanıcı kullanılan tabloyu
kapatıp açtığında o kaydı görür.

Eğer BDE bileşenleri kullanarak programı hazırladıysanız;
Bde Administrator'de kullanığınız alias'ın SQLPASSTHRU MODE özelliğini SHARE AUTOCOMMIT yapmalısınız.

kolay gelsin.
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

okurtdiken ben IBX bileşenlerini kullanarak yaptım.
Dediğiniz gibi transactionu Read-Comited yaptım.Kafama takılan şu:
Tabloyu Kapatıp açmamız gerekli mi? , ve bu açma kapatmayı hangi işlemden sonra nasıl yapacağım? Bir de bu işlemleri yapınca 2 kullanıcı aynı anda kayıt girişi yapabilecek mi?

Bu Konularda da engin bilgilerinizi bekliyorum....
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Commit işleminden sonra tabloyu yeniden açacaksın.

CommitRetaining yaptıysan yeniden açmazsın, çünkü kapanmaz.
Kullanıcı avatarı
okurtdiken
Üye
Mesajlar: 21
Kayıt: 11 May 2004 01:02
Konum: ankara
İletişim:

Mesaj gönderen okurtdiken »

s.a.

A kullanıcısının girdiği veriyi B kullanıcısının görebilmesi için tablonun açılıp kapatılması gerekir. Kullanıcının veri girip girmediğini nasıl anlıyacağım diyorsanız IBEvents bileşenini kullanabilirsiniz. IBEvents bileşeninin kullanımıyla ilgili daha önce konuşulmuştu.

kolay gelsin.
Cevapla