Trigger + Dead Lock hatası

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
habilkader
Üye
Mesajlar: 61
Kayıt: 14 Eki 2006 11:11

Trigger + Dead Lock hatası

Mesaj gönderen habilkader »

Merhabalar ;
D7+ FB 2.0 + IBX ile geliştirilen bir proje şöyle bir sorunum var.
StokHareketi adında bir tablom var
StokBakiye adından ikinci bir bir tablom var.

StokHareketi tabloma insert veya update yapıldığında bu tablonun AfterInset ve AfterUpdate triggerleri içinde StokBakiye tablosundaki bakiye alanlarını otomatik güncelleliyorum.

Programda Fatura işlemi gerçekleştirirken
1.Kullanıcı yeni bir fatura kaydı açtı ve stokları ekledi. Ancak henüz kaydetmedi. Bu sırada
2.Kullanıcıda yeni bir fatura kaydı açtı ve o da stok eklemeye başladı. Eğer 1.kullanıcının eklediği stoklardan birini eklerse Dead Lock hatası alıyorum.

Trigger içeriği :"

Kod: Tümünü seç

Update stokbakiye set miktar=xxxx where stokkodu=new.stokkodu
"

Hatayı takip ettiğimde bunun StokHareket tablosunun Afterinsert ve AfterUpdate triggeri içindeki güncelleme sorgusundan kaynaklandığını tespit ettim.

Bu sorunu nasıl aşabilirim. Klasik Deadlock hatasının dışında bir durum olduğunu düşünüyorum.
IBXTranction durumu:
read_committed
rec_version
nowait
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Trigger + Dead Lock hatası

Mesaj gönderen eyalin »

Daha önce bahsi geçmiş aynı sıkıntı bendede var.

viewtopic.php?t=8809&highlight=deadlock
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Trigger + Dead Lock hatası

Mesaj gönderen eyalin »

Çözüm bulursak paylaşalım... :idea:
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Trigger + Dead Lock hatası

Mesaj gönderen eyalin »

Transaction parametlerinden "nowait" yerine "wait" yaparsak diğer işlemin bitmesini bekliyor ancak bu defada program yanıt vermiyor...Bazı yabancı sitelerde bu durumu "bu kayıt şu anda kullanılıyor" gibi bir hata uyarısı ile geçiştirmeyi önermişler...Siz bir çözüm buldunuz mu?
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Re: Trigger + Dead Lock hatası

Mesaj gönderen HBV »

Biraz geç oldu ama ...."Dead Lock hatası",nı ilk zamanlar bende yaşadım ,bu sorun bazı bileşenlerle çözülüyor bunlardan bir tanesi FIB plus bileşenleridir? çok kullanışlıdır,kullanıcılar aynı tabloda istedikleri gibi işlem yapabilirler ,FIBPlus,ın internetde eski ücretsiz sürümünüde bulabilirsiniz?.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Trigger + Dead Lock hatası

Mesaj gönderen Kuri_YJ »

Evet ben de ne zamandırt foruma uğramıyordum. Şimdi gördüm,

Öncelikle bu tür sorunlar, Veritabanının değil, Kurgulayanın hatasıdır. Çok Kullanıcı programı yazacak kişilerin, bu tür durumları gözeterek, veritabanını tasarlamaları gerekir. Veri tabanında, after triggerında, stok kodu vermeye kalktığınızda bu tür sorunlarla her zaman karşı karşıya kalırsınız. Bunun yerine, ya Delphi tarafında Generatorleri IBX bileşenlerinde set edip, daha on new recordda ID almasını sağlayacaksınız. Ya da, işi biten bir formun bilgileri post olunurken, bir procedure'de bu işleri halledeceksiniz.

Bence öncelikli olarak veritabanınızın yapısı gözden geçirilmeli.

Kolay Gelsin
Adnan
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla