MSSQL Transaction sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

MSSQL Transaction sorunu

Mesaj gönderen serbek_tr »

Merhaba arkadaşlar,

MSSQL serverde transaction problemi yaşıyorum sebebini bir türlü çözemedim. Öncelikle şunu belirteyim örnek olarak vereceğim kod mantığını Firebird projelerimde de kullanıyorum hiç bir sorun yaşamıyorum.

Query bileşenlerin CachedUpdates özellikleri True, Bileşen SDAC, MSSQL Server 2008 R2.

Master tablomun After Post olayı aşağıdaki gibi;

Kod: Tümünü seç

  
  with qMaster do
  begin
     try
        ApplyUpdates;
        DD.Commit;
     except
     on E: Exception do
     begin
         DB.Rollback;
         RevertRecord;
         Mesaj('Hata','Bilgiler kayıt edilirken beklenmeyen hata oluştu. Hata : '+#13+E.Message,
         'ME','Tamam','','',True,False,False);
     end;
     end;
     CommitUpdates;
     qDetail.CommitUpdates;
  end;
DEtail Tablomun da AfterPos olayı şöyle;

Kod: Tümünü seç

  with qDetail do
  begin
    try
       ApplyUpdates;
    except
    on E: Exception do
    begin
      RevertRecord;
      Mesaj('Hata','Bilgiler kayıt edilirken beklenmeyen hata oluştu. Hata : '+#13+E.Message,
      'ME','Tamam','','',True,False,False);
    end;
    end;
   end;
Bu durumda Transaction'ı formu create ederken başlatıyorum kaydet düğmesine basılınca da qmaster.post dediğim için master kayıt edilirken detail kayıtlarında edilmesi cancel düğmesine basılıncada

Kod: Tümünü seç

qmaster.CancelUpdates;
qdetail.CancelUpdates;
DB.Rollback;


Komutları çalışıyor.

Bu düzene rağmen master tabloyu kaydedeğim yada etmiyeyim detail tabloda yaptığım hareketler veri tabanına yazılıyor. Firebird projelerinde bir sorun yaşamıyorum ancak MSSQL de yaşıyorum. Delphi konusunda iyi bir abime sorduğumda delphinin standart bileşenlerinde aynı sorunu bende yaşadım dedi. Ama ben SDAC kullanıyorum ve transaction çalışmıyor. Ne yapmalıyım, kodumda bir düzensizlik yada yanlışlık varmı yardımcı olursanız sevinirim. Teşekkürler.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: MSSQL Transaction sorunu

Mesaj gönderen aslangeri »

s.a.
transaction ı detail kayıtları post ettikten sonra commit yapmalısınız. Mastır tabloyu kayıt ettikten sonra commit ettiğiniz için detay kayıtlar transaction ın dışında kalıyor olabilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Re: MSSQL Transaction sorunu

Mesaj gönderen serbek_tr »

Merhaba, Yukarıda iki tane afterpost olayı yazdım birincisi master, ikincisi detail tablonun, transaction formu açılır açılmaz başlıyor ve kaydet düğmesine basıldığı zaman şu kod çalışıyor

Kod: Tümünü seç

qdetail.post;
qmaster.post;
ve gördüğünüz gibi transaction master tablonun after postunda commit yada rollbac ediliyor... bu durumda detailin transaction dışında kalmaması gerekli. Ama bazen insan apaçık orada olan problemi bile göremeyebiliyor, bir yanlışım varsa düzeltin lütfen. Teşekkür ederim.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla