1. mesajda eklenen kod ile
CurrentDb.Execute "INSERT INTO tblLog (Text1) VALUES ('New banana delivery')", dbFailOnError
CurrentDb.Execute "UPDATE tblInfo SET InfoText = 'Banana count: 2983' WHERE ID = 6 ", dbFailOnError
CurrentDb.Execute "DELETE FROM tblTemp", dbFailOnError
ilk satır yeni veri ekliyor , ikincisi veri güncelliyor üçüncüsü tabloyu boşaltıyor
DAO.DBEngine.BeginTrans
satırı ile bu 3 sorgu işleminden önce veritabanını kilitliyoruz.
sonra sorguları sırası ile çalıştırıyoruz
eğer tüm sorgular sıkınıtısz bir şekilde görevini başarı ile tamamlarsa
DAO.DBEngine.CommitTrans
satırı ile veritabanını güncelliyoruz. vertabanı kilidi kalkıyor
eğer bu üç sorgu işleminden herhangi birisinde işlem hatası olursa
tran_Err:
DAO.DBEngine.Rollback
ile tüm işlemleri geri alıyoruz. yani son satırdaki silme sorgusunda hata çıktığında
ilk satırdaki ekleme işlemide iptal oluyor. Yani Undo gibi birşey
birinci ve ikinci sorgularda olan işlemler hiç olmamış gibi veri tabanı ilk haliyle kalıyor
Bu konuda
iki önemli husus var bunlardan birincisi
*hatayı yakalamak yani bu üç sorgudan en az birinde hata olduğunu anlamak için
CurrentDb.Execute ..............................., dbFailOnError
"
dbFailOnError" kelimesini mutlaka eklememiz lazım
ikinci önemli husus ise
*
BeginTrans ve CommitTrans satırları arasında veritabanı sadece bize çalışıyor olacak
bir kaç kullanıcı veritabanına bağlanıyorsa onlar salt okunur açabilecekler.
bir de resimdeki şu ayar yapılmalı