işi biten transaction lar hakkında.
işi biten transaction lar hakkında.
Sel.Al.arkadaşlar.firebird 1.5 de bi proje geliştiriyoruz.kullanıcı sayısı 50 nin üzerinde .formlarımın birinde sürekli olarak sorgu çekilen bi bölümüm var(kullanıcının tıkladığı işlemin detayı).şimdi burda sormak istediğim birşey var.mesela bi sorgu çekiyoruz.bu sorguyla işimiz bitince query i kapatıyoruz.transactionu da hemen kapatıyoru.doğal olarak kullanıcının işlemlere tıklaması sonucu bu transaction yeniden aktif oluyor.ben burda query i kapatınca hemen transactionu da kapatıyorum.transactionu hemen kapatmak mı yoksa form kapanırkenmi kapatmak daha mantıklı.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
meron06 demişki
Transaction bir iç hizmettir. Query veya Dataset Open olduğunda aktif, Close olduğunda Pasif olur. sizin ayrıca TransAction.Active := false demeneize gerek yoktur.doğal olarak kullanıcının işlemlere tıklaması sonucu bu transaction yeniden aktif oluyor.ben burda query i kapatınca hemen transactionu da kapatıyorum.transactionu hemen kapatmak mı yoksa form kapanırkenmi kapatmak daha mantıklı.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
selimr yazdı:her sorgudan önce transaction u yeniden başlat bence.. aksi taktirde diğer kişiler tarafından yapılan değişiklikler senin oluşturduğun sorgu tarafından görünmeyecektir..
Query kapatılıyor doğal olarak transaction false dir. Query open olduğunda transaction true olacaktır...meron06 yazdı:]bu sorguyla işimiz bitince query i kapatıyoruz.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
querylerin commit edilmesi hatalı bir anlatım oldu belki ama anlatmak isdiğim şu;
data üzerinde değişiklik yapmak üzere execsql şeklinde çalıştırılan bir queryden sonra değişikliklerin kalıcı olması için bağlı olan transaction un commit edilmesi durumunda doğal olarak transaction kapatılmış olacaktır..
fakat herhangi bir datadan sorgulama yaptığımız zaman, sorgulama sonucunda transactionunun kapatılması diye birşey sözkonusu değildir..
benim söylemek istediğim;
herhangi bir sorgunun sonucunun güncel olmasını sağlamak için; sorgunun bağlı olduğu transaction, sorgu yapılmadan önce açık olsa bile kapatılıp tekrar açılmalıdır.. aksi takdirde açık olduğu sürece diğer kullanıcılar tarafından veya diğer transactionlarda olan güncelleme ve değiştirme, yeni kayıt gibi işlemler sorgulama yapılan transaction tarafından görünmeyecektir.. bilmem anlabildimmi..
data üzerinde değişiklik yapmak üzere execsql şeklinde çalıştırılan bir queryden sonra değişikliklerin kalıcı olması için bağlı olan transaction un commit edilmesi durumunda doğal olarak transaction kapatılmış olacaktır..
fakat herhangi bir datadan sorgulama yaptığımız zaman, sorgulama sonucunda transactionunun kapatılması diye birşey sözkonusu değildir..
benim söylemek istediğim;
herhangi bir sorgunun sonucunun güncel olmasını sağlamak için; sorgunun bağlı olduğu transaction, sorgu yapılmadan önce açık olsa bile kapatılıp tekrar açılmalıdır.. aksi takdirde açık olduğu sürece diğer kullanıcılar tarafından veya diğer transactionlarda olan güncelleme ve değiştirme, yeni kayıt gibi işlemler sorgulama yapılan transaction tarafından görünmeyecektir.. bilmem anlabildimmi..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
arkadaşım transaction un açık olması kaydın dataya işlenmesine engel değildir. + Commit veya CommitRteaining yöntemiyle dataya işlenen kayıtlar her türlü başkaca queryler tarafından close - open yöntemiyle görülürler. yani burda diğer querylerin dataya işlenen en son kaydı görmesi kaydı dataya işleyen transaction un kapalı veya açık olmasına bağlı değildir...benim söylemek istediğim;
herhangi bir sorgunun sonucunun güncel olmasını sağlamak için; sorgunun bağlı olduğu transaction, sorgu yapılmadan önce açık olsa bile kapatılıp tekrar açılmalıdır.. aksi takdirde açık olduğu sürece diğer kullanıcılar tarafından veya diğer transactionlarda olan güncelleme ve değiştirme, yeni kayıt gibi işlemler sorgulama yapılan transaction tarafından görünmeyecektir.. bilmem anlabildimmi..
sevgili arkadaşım;
değişikliklerin diğer queryler tarafından görünmesi için; querylerin close; ve open yapılması yeterli olmaz..
örnek;
--
değişiklik ve yeni kayıt işlemelri için şunları kullanıyorum
query1 ve transaction1
sorgulama içinde ise
query2 ve transaction2
bu durumda sorgulama yapmak için transaction2 yi kapatıp tekrar açmadan transaction1 de query1 tarafından yapılan değişiklikler sorguda yani query2 de görünmeyecektir..
değişikliklerin diğer queryler tarafından görünmesi için; querylerin close; ve open yapılması yeterli olmaz..
örnek;
--
değişiklik ve yeni kayıt işlemelri için şunları kullanıyorum
query1 ve transaction1
sorgulama içinde ise
query2 ve transaction2
bu durumda sorgulama yapmak için transaction2 yi kapatıp tekrar açmadan transaction1 de query1 tarafından yapılan değişiklikler sorguda yani query2 de görünmeyecektir..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
arkadaşım yine anlaşamıyoruz. ben diyorum ki bu dedikleriniz transaction sayesinde gerçekleşen işlemler değildir. yukarda belirttiğim gibi Transaction bir iç hizmettir. ve görevi bellidir. post edilmiş verileri içerisinde barındırır ve bu verileri ya boşaltır ya da VT ye işler. bunun dışında bir güncelleme işi için kullanılmaz. siz 2.query nin 1.Query den girilen veya silinen veya düzenlenen verileri görmesini isityorsanız 2.Query.close yapıp select ile Vt den kayıtları tekrar çekmelisiniz. burda 2.transaction u false true yaparak işi halledemezsiniz. Transaction Query, Table veya datasetlere bağlı çalışır. Query open olduğunda transaction da haliyle aktif hale gelir. ancak transaction true yapılması Query nin aktif olacağı manasına gelmez. burda marifet transactionda değildir. sizin belli aralıklarla Vt den select ile kayıtları çekmeniz ile mümkündür. Close edilen Query'e bağlı bir transaction un aktif olmasıda birşey ifade etmez. transactiona bilgi gönderen asıl bileşen table, query veya datasettir.
transaction ac-kapa yapmayın...
Selam,
Bende 1 tane database ve 1 tane transaction var, isin basinda database i aciyorum, programdan çıkarken de kapatıyorum, her şey gayet güzel çalışıyor hocam.
Bir de şu yazıya göz atın isterseniz, özellikle yazıdaki son mesajlara :
viewtopic.php?t=16616&postdays=0&postor ... g&start=15
Bende 1 tane database ve 1 tane transaction var, isin basinda database i aciyorum, programdan çıkarken de kapatıyorum, her şey gayet güzel çalışıyor hocam.
Bir de şu yazıya göz atın isterseniz, özellikle yazıdaki son mesajlara :
viewtopic.php?t=16616&postdays=0&postor ... g&start=15
Sevgi, Saygı.....