IBTransaction Hakkında kafamı karıştıran bir kaç soru...

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
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

IBTransaction Hakkında kafamı karıştıran bir kaç soru...

Mesaj gönderen kahraman1285 »

Mrb .

Transaction hakkında anlamadığım bir iki husus var yardımcı olursanız sevinirim...

1.Aynı Table üzerinde işlem yapan IBQuery,IBTable ve IBDataset varsa bunların hepsi aynı IBTransaction mı bağlanmalı?

2.Yine aynı IBQuery,IBTable ve IBDataset Active=true ise ve üzerinde işlem yapılırken bunların bağlı olduğu IBTransaction Active=false mı olmalı

3.ben IBTransaction'ı Active =True pozisyonunda getirdiğimde bazen "deadlock,locklift" şeklinde hata veriyor ve IBTransaction false yapmak zorunda kalıyorum.Bu işlem doğru mu? [img][img]http://img477.imageshack.us/img477/767/capture2db7.jpg[/img][/img]

3.IBQuery kullanırken sadece "select * from xxx" şeklinde bir ifade kullandığımda IBQuery'nin AfterPost olayına

Kod: Tümünü seç

IBTransaction.Commitretaining
yazmam gereklimi? Yoksa bu ifade sadece yeni kayıt girişlerinde mi kullanılmalı?

Teşekkürler...
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhabalar.. Transaction meselesini kafanızda büyütmenize gerek yok...

özet olarak tarnsactionun görevi bağlı olduğu table, query veya dataset in
insert, update ve delete işlemlerini servere ileten emir kuludur... yani aracıdır... siz transaction.commit derseniz transaction ilgili vt işlemlerini yeni kayıt, düzeltme veya silme işlemlerini Database üzerinde uygular. Rollback derseniz de üzerinde taşıdğı yükü kaldırır atar... aracı ya arkadaş. :D

siz dataset, query veya table yi open yaptığınızda bağlı tarsnaction da aktif olur. transactionu pasif yapmanız yukarda verdiğiniz hataya sebebiyet vermektedir.

yukarda verdiğiniz aynı tablo üzerinde işlem yapan 3 bileşeni de aynı transactiona bağlamak konusunda, 3 bileşenle de kayıt girme, düzenleme ve silme yapıyorsanız yanlış olur derim, yok birinde kayıt giriyorum, diğerinde kayıt arıyorum, diğerinde sum gibi sorgular yapıyorum derseniz sakıncası yok, bilakis iyi de olur...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Peki Kadir bey:

Şöyle bir kod yazdığımda IBTransaction Active=False mı olmalı yoksa Active=true Mu?

Kod: Tümünü seç

IbTable.insert;
IBtableadi.value:='ahmet';
IBtable.post;

IBTableAfterpost olayı

IBTable.commitretaining;
Bu kod işlerken sadece IBtable'ın active olması yeterlimi ibtable post esnasında Ibtransaction kendi mi active yapacak?
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

kahraman1285 yazdı:Peki Kadir bey:

Şöyle bir kod yazdığımda IBTransaction Active=False mı olmalı yoksa Active=true Mu?

Kod: Tümünü seç

IbTable.insert;
IBtableadi.value:='ahmet';
IBtable.post;

IBTableAfterpost olayı

IBTable.commitretaining;
Bu kod işlerken sadece IBtable'ın active olması yeterlimi ibtable post esnasında Ibtransaction kendi mi active yapacak?
siz Tableyi aktif yaptığınızda beraberinde bağlı transactionda otomatikmen aktif olur. transactionun bağlı olmaması durumunda hata alırsınız zaten. Interbase ve fb de trabsaction kullanımı zorunludur. ilgili bileşenin afterpost olayında commit yapmak saçma olur. bunu ilgili kaydın kaydet işleminde yapmanız daha doğru olacaktır...

kaydet...

Kod: Tümünü seç

IBTable1.post;
IBtransaction.commitretaining;
Kolay gelsin...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Cevapla