Generator Alanı Rollback Olmuyor

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
SAHAN33
Üye
Mesajlar: 36
Kayıt: 24 Eki 2006 04:34

Generator Alanı Rollback Olmuyor

Mesaj gönderen SAHAN33 »

Firebird 1.5.3 ile oluşturulmuş bir projede tabloya kayıt girilirken bir hata oluştuğunda yani

Kod: Tümünü seç

 
Try 
 Generatoru çalıştır..
 Yeni kayıt numarasını al
 Tabloya kayıtları gir
Except
 Hata oluştuğunu bildir 
 RollbackRetaining işlemini yap.
End;
CommitRetaining işlemini yap
işlem Except içine düşünce tabloya kaydı yapmıyor ancak Generator kaydı bir arttırlımış oluyor. tabloda Muhasebe ödendi tablosu ve numaraların kayıt girilmeden artmaması gerekiyor. Bir tabloyu veya SQL işlemini RollBack yapınca Generatoru nasıl rollback yapabilirim ?
Teşekkür ediyorum
-----------------------------------------------------------
Forumda Arama yapınca aynı sorunun cevaplandığını gördüm ve gerekli işlemi öğrendim. sorun çözüldü Yani...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
generator rollback olmaz. transactionla ilgisi yok generatorun. bağımsız çalışır.
olması zaten mantıklı değil. düşünsene ağ üzerinde aynı anda birkaç kişi insert yaptı generatordan herbiri bir değer aldı. sonra biri rollback yaptığında generator geriyemi düşecek....
bu tarz artanlar için generatoru değil manuel bir artışı kullanmanız lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@aslangeri gerekeni söyledi. Veri tabanında herhangi bir tutarsızlığa meydan vermemek için her insert olayında anlık olarak Generator alınıp verilen sayı kadar elle ya da dataset aracılığıyla artırılarak veri tabanına kalıcı olarak yazılması sağlanır. Kayıttan vazgeçmede ise yine - (eksi/negatif) değerde bir sayı kadar da azaltma sağlanabilir. Buradaki generatörden amaç PK (Primary Key) alanının eşsizliğini sağlamaktır. Dolaysıyla ardışık olup olmamasının bir önemi yoktur. Bir numaratör gibi kullanmak için başka yöntemler bulmak gerekir. Bir alanın en son değeri alınıp bir artırılabilir. Yine de ağ ortamında kayıt tamamlanmadan rollback olduğunda bunda da sorunlar çıkacaktır. En doğrusu post/commit işlemi sonunda numaratörü elle (generatör de olabilir) artırmak olacaktır. :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
SAHAN33
Üye
Mesajlar: 36
Kayıt: 24 Eki 2006 04:34

Mesaj gönderen SAHAN33 »

cvp için tşk ederim. Projede, Muhasebe tablosu var ve o bölüme 46 kullanıcıdan sadece muhasebe yetkisi ( Tahsilat) olan tek kişi erişebiliyor. Onunda yapacağı insert durumlarında sayaç (ID) alanının tek tek artması gerekiyor. eğer arada numara kaçarsa o kayda ait bilgi bulunmadığından akşam alınan kasa dökümünde sorun çıkıyordu. Tek kullanıcı olduğundan da generator ID alanına bağlanmıştı. Yani karışık bir durum. Bu nedenle bazı durumlarda generatorun geri alınması gerekebiliyordu. Allahtan sorunla ilgili yanıtı dün yine forumda arayarak buldum. iyiki böyle bir tartışma platformumuz var. Yöneticilere de tşk etmek gerekir.
En son SAHAN33 tarafından 24 Oca 2008 03:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bulduğun cevabın bağlantısını da yazsan tam süper olacaktı. Daha sonra aynı sorunu çözenler için bütünlük sağlanırdı :wink: .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
SAHAN33
Üye
Mesajlar: 36
Kayıt: 24 Eki 2006 04:34

Mesaj gönderen SAHAN33 »

Bakınız viewtopic.php?t=17245
ve arama olarak ta Generator+Rollback 3 sayfada çıkan bir link. Yazan Arkadaşa da tşk edelim. Faydalanmış olduk..
Cevapla