Transactionu commit edince generatör geri almıyor.

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ı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Transactionu commit edince generatör geri almıyor.

Mesaj gönderen NewMember »

Arkadaşlar merhaba;
Otomatik artan alanım IBDatasete bağlı.generatör On Post olayından sonra artırıyor.Kaydı post ettikten sonra rollback yapmam gerekirse Rollabck yapıyorum kaydı database yazmıyor.Ancak otomatik artan alanın değeri değişiyor.Yani onu geri almıyor.Mesela bu alanın değeri 40 olsun.5 defa rolback yapsam sonra commit etsem ardışık kaydın idsi 45 oluyor.Acaba generatörü de rollback etmenin bir yolu varmı?

Teşekkürler.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Generator Transaction dan bağımsızdır. Transaction u RollBack yapman Generator ü eski haline getirmez. DÜşünün ki aynı generator u ağdaki bir başkası sizden sonra kullandı ve bir daha artırdı. O zaman siz eski haline getirirseniz veritabanının halı nice olur :roll: İlle de eski haline gelsin derseniz BeforeCancel da alandaki değer ile veritabanındaki değer eşit ise dikkatlı olmak şartı ile (bu anlık zamanda bir başkasının artırmadığını garanti edemezsiniz!!) bir azaltabilirsiniz :!:

Veritabanındaki değeri almak için;

Kod: Tümünü seç

select gen_id(GEN_STOK_ID, 0) from rdb$database
Generator ü 1 eskiltmek için;

Kod: Tümünü seç

select gen_id(GEN_STOK_ID, -1) from rdb$database
Generator ü 1 artırmak için;

Kod: Tümünü seç

select gen_id(GEN_STOK_ID, 1) from rdb$database
sorgularını kullanabilirsiniz.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Generator'ler Transaction'dan bağımsız çalışırlar. Yani değerini arttırdıysanız, arttırmışsınızdır. Ancak Generatörlere bildiğim kadarıyla değer atanabiliyor. Yani Ey Generator, senin bundan sonraki yeni değerin budur diyebiliyorsun.

Ancak neden geri almayı düşünüyorsunuz bunu anlayamadım? Yani illa kullandığınız rakamlar ardışık olmak zorunda mı? Ardışık olacak ise, Generator dışında bir çözm düşünün, yani bir tablo açın orayı kendiniz yönetim. Yani oraya değer koyun, transaction ile birlikte otomatik olarak o değer de eski haline döner.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Hocam kusura bakma saniye farkı ile :lol:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

@rsimsek abi ve @Kuri_YJ çok teşekkür ederim.Bu söylediklerinizden sonra bundan vazgeçiyorum.Dediğiniz gibi başkasıda bunu artırmışsa eyvah.Bunu düşünemedim.Aslında ardışık olmaması çok sorun değil.Çünkü elbette bu tablolardan kayıt silinecek ve bu ardışık yapı bozulacak.Ama burda şarta bağlı olarak rollbacki fazla olan bir yapı var ve bu numaralarıda kullanıcıya gösteriyorum.Ardışık iki kayıt arasında çok fark olmasın demiştim ama bundan başka bir alan daha tanımlayıp onu gösteririm buda arkaplanda ne yaparsa yapsın artık. :lol:
Vakit ayırdığınız için teşekkürler.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Yine aynı yapıyı kullanarak bu sefer Cancel/RollBack ler de boş numara kalmaması için doğrudan generator u alana bağlamadan BeforePost ta alıp ilgili alana atayabilirsin ve kullanıcıya numarayı gösterebilirsin :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

rsimsek yazdı:Yine aynı yapıyı kullanarak bu sefer Cancel/RollBack ler de boş numara kalmaması için doğrudan generator u alana bağlamadan BeforePost ta alıp ilgili alana atayabilirsin ve kullanıcıya numarayı gösterebilirsin :idea:
Tabi ya.Generatör bağlanmayacağı için rollback çalışacak.
Teşekkürler abi.
Cevapla