Transaction Rollback yapmıyor.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

Transaction Rollback yapmıyor.

Mesaj gönderen habikus »

Merhabalar,

Fibplus database bilşenleri kullanıyorum.
Aşağıdaki kodlarda görüldüğü gibi önce transaction başlatıyorum. Sonra table1 e kayıt, sonra hatalı satır(kontrol için), daha sonra da table2 ye kayıt. İşlemlerden sonra da commit satırı.
Hata durumunda da rollback komutu var.

Normal şartlarda hata oluşunca table1 e yapılan kaydı geri alması gerekirken neden table1 deki kayıt yerinde duruyor.

Table1 ve Table2 nin Autocommit özellikleri True. Sebep acaba bu mu?

try
YazTr.StartTransaction;
...........
table1 e kayıt

SysUtils.Abort; // deneme amaçlı hata

table2 e kayıt
...........

Form1.YazTr.Commit;// Verileri Veritabanına yazıyoruz
except
Form1.YazTr.Rollback;
SHOWMESSAGE('BİR HATA OLUŞTU');
end;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Transaction Rollback yapmıyor.

Mesaj gönderen rsimsek »

RollBack'ten sonra Tablo/Query/DataSet'leri kapatıp açmalısınız! Görünen bilgiler sadece ekrana/monitöre yansıyan bilgilerdir. Veri tabanı ile okuduğu anda birebir aynı olan bu bilgiler aradan zaman geçtikçe başka bir kullanıcı tarafından bile değiştirilmiş olabilirler.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
habikus
Üye
Mesajlar: 69
Kayıt: 14 Eyl 2011 04:23

Re: Transaction Rollback yapmıyor.

Mesaj gönderen habikus »

Problem şu şekilde çözüldü: Bütün datasetlerimi aotucommit=true yapmıştım. Bu özelliği kaldırınca commit ve rollback lar doğru çalıştı. Bir de daha önce okuma için ayrı yazma-değiştirme-silme için ayrı transaction kullanıyordum. Şu anda her iki durumu da tek transaction yaptım. Tek transaction olmasının bir sakıncası var mı? bilmiyorum. İlginize teşekkürler rsimsek.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Transaction Rollback yapmıyor.

Mesaj gönderen rsimsek »

Aynı form üzerinde birden fazla tablo da olsa tek bir transaction kullanmak mantıklıdır. Çünkü orada o an yapılanlar oradakileri ilgilendirir. post/commit edinceye kadar diğer formlardaki bilgiler birbirlerini ilgilendirmez, zaten göremez de.. Fakat yeri geldiğinde birbirlerinden haberleri olsun denirse datamodule eklenen ortak bir transactionla hepsi yapılandan haberdar olur ve anında formlara yansır. Diğer türlü ise bir yerde bir transactionla yapılan bir değişiklik diğer formlara yansıması için ib_event ve trigger sistemini kurmak lazım.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla