Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
CmdExecMode->amAsync Transaction Hata
#1
Merhaba arkadaşlar,

transaction yapmaya çalışıyorum,

aynı sorguları iki farklı query içerisinde yapıyorum.

birisi normal cmdexec modu olan amBlocking, diğeri ise amAsync olacak şekilde, sorgumun içerisinde birisi çalışan diğeri çalışmayan mysql kodları mevcut. amacım ikisi birlikte çalışırken birisi hata verdiğinde rollback olayının tetiklenmesi, ama enteresan bir şekilde amAsync olarak çalışan query içerisinde hata alamıyorum. (mysql kodun ikinci kısmı hatalı olduğundan)

async çalışma kodlarım ise şu şekilde; (buradaki konudaki helper ın değiştirilmiş hali)

self.Connection.StartTransaction;
 try
   log('ExecAsyncm', ASQL, false);
   Self.ExecSQL;
   if AADialog then
   begin
     ADialog := CreateTaskDialogForAsyncOpen;
     try
       ADialog.Tag := NativeInt(Self);
       ADialog.Text := AExecutionMessagem;
       ADialog.ExecuteAsync(
         procedure
         begin
           while Self.Command.State = TFDPhysCommandState.csExecuting do
             Application.ProcessMessages;
           Sleep(500);
         end
         );
     finally
       if Assigned(ADialog) then
         FreeAndNil(ADialog);
     end;
   end;
   self.Connection.Commit;
 except
   self.Connection.Rollback;
   log('ExecAsyncm', 'Hata: ' + ASQL, false);
   raise;


mysql veritabanı kullanıyorum. 
fdtransaction isolation := xiReadCommitted; 
Autostart, autocommit, autostop değerleri false;

benim anlamadığım cmdexec modu async olduğunda mysql sorgusundaki yanlış kod hata vermeden çalışan kod nasıl aktif oluyor. (sonuçta transaction mantığına aykırı)

ikincisi neden yukarıdaki kodlamada commit olayı tetiklenmiyor.

yardımcı olabilir misiniz. Umarım anlatabilmişimdir.
There is no place like "127.0.0.1"

"Vatanını en çok seven, görevini en iyi yapandır."

Cevapla
#2
Async kısmında yeni connection oluşturulup kullanılıyor. Bu nedenle iki farklı bağlantı session üzerinden işlem yapıyor ve bu nedenle ikisinin farklı transactionlari bulunuyor olabilir. Bunu iki işlemi de klasik modda deneyin işleminiz sorunsuz çalışırsa dediğim duruma bakınız. İnternette thread sql işlemlerini araştırırsanız. Göreceksiniz ki hepsinde thread içinde yeni connection create edilip bağlanarak işlem yapılır.
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Değişik bir hata ikurt07 2 241 30-03-2024, Saat: 14:34
Son Yorum: ikurt07
  Rest Hata Yakalama m_ekici 9 1.667 08-03-2024, Saat: 19:30
Son Yorum: aegean
  Tanım Bulamadım Bu Hata İçin hi_selamlar 11 1.623 30-10-2023, Saat: 18:20
Son Yorum: hi_selamlar
  delphi de garip bir hata ercanskose 11 1.714 26-07-2023, Saat: 12:00
Son Yorum: delphiman
  UniDBGridColumnFilter Release Modda Hata veriyor yhackup 18 2.920 19-01-2023, Saat: 10:29
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi