öncelikle kolay gelsin,
Anlatacaklarımı forumda iyi bir arama yaparsanız bulabilirsiniz.
Acizane olarak şu bilgilerin bilinmesinde fayda var. Çünkü hataların çoğu bu terimlerin bilinmemesinden ve doğru yerde kullanılmamasından kaynaklanıyor.
Bilgi listelenecek; (işlemden önce veya sonra) database açıkmı, table vs. açıkmı, duruma göre transaction commit edilmiş haliyle açıkmı.
Şimdi tutturulmuş
CommitRetaining bu terim her yerde geçerli değil. Mesela dataset kullanıyorsunuz. Afterpost olayına yazdınız bu komutu
dataseti istediğiniz kadar açın kapatın refresh yapın yeni durumu göremeyeceksiniz. Ancak database ile ilgili bağlantıları kapatıp açmadığınız sürece.
Bilinmesi gereken terimler :
Commit: Transactiondaki bilgileri vt ye yazar tarnsactiondaki bilgiler boşaltılır, vt ile transaction arasındaki bağlantı kesilir.
Rollback : traansactiondaki bilgiler vt ye yazılmaktan vazgeçilir. transaction boşaltılır, vt ile transaction arasındaki bağlantı kesilir.
CommitRetaining : transactiondaki bilgiler vt ye yazılır transaction boşaltılır, vt ile transaction arasındaki bağlantı devam eder.
RollbackRetaining : traansactiondaki bilgiler vt ye yazılmaktan vazgeçilir. transaction boşaltılır, vt ile transaction arasındaki bağlantı devam eder.
rsimsek hocamın bir yerde verdiği cevap;
CommitRetaining yaptığında Transaction da yaptığın işlemleri veritabanı üzerinde kalıcı hale getirirsin. Fakat diğer kullanıcının bu tablodaki bilgileri görebilmesi için DataSet i Rehresh yapmak yetmiyor
Kapatıp açmak hatta IBDatabase i de kapatıp açmak gerekiyor
Burada IBDatabase yerine;
Kod: Tümünü seç
IBDataSet1.Active then
IBDataSet1.Close;
IBTransaction1.Active := False;
IBTransaction1.Active := True;
IBDataSet1.Open;
şeklinde Transaction u kapatıp açmak daha uygun olur.
Yani transactionun görevi güvenli bir şekilde bilgiyi veritabanına uygulamak.
Bir de;
ApplyUpdates ve CancelUpdates olayı ile ilgili kısa bir bilgi verelim.
Cached Updates değişikliklerin direk veri tabanı üzerinde değil de bellek üzerinde yapılmasını ve istendiği anda bu değişikliklerin veri tabanına uygulanmasını sağlar.
Cached updates genellikle uzak veritabanlarına erişim işlemlerinde kullanılırlar. Bunun temel sebepleri arasında ağ trafiğini rahatlatmak ve işlem zamanlarını minumuma indirmektir. Bunun kullanımında yararları ve zararları ile ilgili forumda çok bilgi bulabilirsiniz.
Özet olarak;
ApplyUpdates ve CancelUpdates transactionla değilde direkt olarak table, query veya dataset teki bilgileri hafızaya alarak çalışır. yani post komutundan sonra bilgiler chackedupdates true ise transactionda değilde hafızaya yüklenir. tabi bu durum uzun bilgi girişlerinde hafızayı doldurabilir veya performansını düşürebilmektedir. post ile hafızaya alınan bilgiler applyupdates komutu ile vt ye yazılır ve hafıza boşaltılır. cancelupdates ile de hafızadaki bilgiler vt ye yazılmaz hafıza boşaltılır.
sonuç olarak;
Genelde tercih edilen transaction olayıdır. Transaction olayında ise işlemden sonraki halinin ne olacağı kavranılmışsa hiç bir sorun yaşamazsınız.
Tekrar kolay gelsin...Umarım faydalı olabilmişimdir.