deadlock 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.
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

deadlock hatası

Mesaj gönderen monet »

interbase 6.5 versionda aynı anda 2 kişinin aynı dosyaya veya kayda ulaşması anında deadlock diye bir hata üretiyor. eski konuları aradım ama bir sonuç elde edemedim.
MT
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

benim bildigim bir kayıtı birisi edit yaparken diger kisi silme,edit benzeri birsey yapmaya calısırsa bu hatayı alması lazım, bu da normal zaten
ÜŞENME,ERTELEME,VAZGEÇME
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

zaten öyle ama

Mesaj gönderen monet »

akış şöyle,
bir dosyada surekli artan bir no var. her kullanıcı bir forma girdiğinde
bu dosyadaki bir değişkeni bir arttırıyor ve post ediyor. sonra diğer kullanıcı girdiğinde oda değişkeni bir arttırıyor ve post ediyor.
ama yani bir kullanıcı o formu açtığında diğerinin o dosyada işi bitmiş oluyor ama galiba server üstündeki data anında yenilenmediği için bu hatayı veriyor. Yani bir kullanıcı dosyayı editte açıp öyle kalmıyor.
Açıyor edit post ediyor ama diğeri bir kaç saniye sonra bile girse deatlock diyor.
MT
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Bu artırma işi için generator'ler ideal. Generator kullanın.

Kolay gelsin.
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

ama o örnek bir değişkendi

Mesaj gönderen monet »

bunun dışında bir suru değişken var. Yani aynı anda stok kartı açacak 2 kişi birisi mutlaka deatlock hatasına düşüyor.

Yani aynı anda 2 kişi aynı table ı kullanamıyor.
MT
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Eger TTable vey TQuery kullanıyorsanız UpdateMode özelliğini upWhereKeyOnly olarak değiştirin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

IBtable kullanıyorum

Mesaj gönderen monet »

yani bir şeyler yanlış ama hadi hayırlısı
MT
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

Problemin tam oluşumunu yazıyorum

Mesaj gönderen monet »

Yaptığım aynen şu.

IBtable2.First;
IBtable2.Edit;
IBtable2Stokno.value := IBtable2Stokno.Value+1;
IBTable2.Post;

Fakat iki kişi (veya daha fazla olabilir) kullanırken
birisi edit edip post ediyor diyelim.

stokno 29 dan 30 çıkıyor.
Sonraki kullanıcı formu açtığında değeri 30 görüyor ve yukarıdaki satır işlediğinde değer 31 oluyor.

Sorun şu ki stok değerini 29 dan 30 çıkaran terminal yeniden formu açtığında IBTable2.first satırında ona stokno yine
30 geliyor bu defa yani arada diğer kullanıcının 31 yaptığı değeri görmüyor ve post ederkende deatlock hatası veriyor.

Aslında sonradan giren kullanıcı devam ediyor sorusuz sorunlar ilk giren kullanıcıda oluşuyor. Ve kullanıcı ilerliyemiyor.

Yani neredeyse 24 saattir bunu çözmeye çalışıyorum.
MT
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Admin yazdı:Bu artırma işi için generator'ler ideal. Generator kullanın.

Kolay gelsin.
bencede...
ÜŞENME,ERTELEME,VAZGEÇME
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

generator

Mesaj gönderen monet »

Generator nasıl kullanılır nasıl tanımlanır bilmiyorum ki
MT
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: generator

Mesaj gönderen mussimsek »

monet yazdı:Generator nasıl kullanılır nasıl tanımlanır bilmiyorum ki
hocam cevap ne olabilir sence :) Tabii ki Arama :!:

Forum bir hazine. İlk işin aramak olsun. Ayrıca FireBird seminerinde bu konu geçmişti.

Kolay gelsin.
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

devamı

Mesaj gönderen monet »

+ Bu sadece artan bir alan.
artmayan alanlarda edit post yaptığımda nolcak.
Aynı hatayı yine alcam.

Stok dosyasına birisi açtı değişiklik yaptı kapattı.
Sonraki kullanıcı açıp birşey yapmak istediğinde yine aynı hatayı vercek yani bu hata genel benim için.

Yani table yi ben neden kurtaramıyorum lock durumundan.
MT
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

hocam bu normal bir durum eger boyle olmasaydı kayıtlar birbirine girerdi...
firebird yine rowlevel kilit koyuyor. paradoxta biri kayıt girerken digeri sırasını bekliyor...
aynı kayıt uzerinde iki kisinin edit durumu oldugunda ilk giren kayıtı kilitler, senin dedigin diger alanlar (yani otomatik artan olmayan) aynı kayıt icin degistiriliyor ise yine aynı durum olur
yalnız burada birseyleri gozden kacırıyorsun galiba, kayıtları birbirinden ayıran nedir? otomatik artan bir primary alan degilmi, eee
bunu generator kullanarak artırdıgımızda hic cakısan kayıt olmayacak, o zamanda aynı kayıt uzerinde iki kişi işlem yapamayacak,
sadece birisi aynı kayıtı değiştirirken diğeri aynı kayıtı değiştiremeyecek, aslolan da bu
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Hocam anlaşıldı, arama yapmamakta ısrarlısın. Lütfen bizi de anlayın biraz. Dön dolaş temcit pilavı gibi yazmayalım aynı şeyleri.

Generator : http://www.delphiturkiye.com/ibautoinc.htm

IBDataset : http://www.delphiturkiye.com/ibdataset.htm

Interbase'i Çok Kullanıcılı (MultiUser) Kullanmak : http://www.delphiturkiye.com/ibmultiuser.htm

Kolay gelsin.
monet
Üye
Mesajlar: 68
Kayıt: 26 Şub 2004 02:12
Konum: İstanbul

Arama yaptım ama gerçekten

Mesaj gönderen monet »

bulduklarım beni sonuca ulaştırmadı bir turlu.
Ben programı mutiuser çalıştırıyorum.
Ama sorunum bir dosyayı arka arkaya 2 kullanıcı kullanırsa tekrar birisi birşey değiştirmek istediğinde deatlock diyo. bu kişide genelde ilk giren kişi oluyor. sonraki çalışmaya devam ediyor. Yoksa her ikiside raporlara ulaşıyor. Sadece değişiklik hakkı sonra girende kalıyor. Tablex.active = false yapsam bile sonuç değişmiyor.
MT
Cevapla