Arsip: no more transaction on this session (?) ADO

 
user image
more 16 years ago

ronin

kenapa muncul pesan 'no more transaction on this session' pada saat dilakukan command blok BeginTrans - CommitTrans - RoolbackTrans. sehingga proses updating data gagal terus. Sebelumnya proses ini tidak ada masalah. Setelah ada beberapa tambahan TADOQuery dengan memanfaatkan single TADOConnection. baru pesan ini muncul. - Apakah ada batasan jumlah connection pada TADOConnection? - Bagaimana cara kita mengetahui jumlah transaction pada session yang ada? - Bagaimana cara solusi jitu hal ini? Matur Nuwun
user image
more 16 years ago

ronin

Maaf pesan aslinya adalah 'Cannot start more transactions on this session' Dabatase : MS-SQL 2000
user image
more 16 years ago

belajaraja

Salam.. coba pake seperti ini
procedure Tfrminput.btnsimpanClick(Sender: TObject); 
var 
  ErrorOccured : boolean;   
begin 
  ErrorOccured := False; 
  with DataModule do 
  begin 
    try 
        
      koneksi.BeginTrans; 
     
      {masukan perintah sql nya disini.............}
     koneksi.CommitTrans
    except 
      on E:Exception do 
      begin 
        DBConnection.RollbackTrans;  
        ErrorOccured := True; 
        MessageDlg('Transaksi Memasukan data Gagal !!!' +#13+ 'ERROR: ' + e.Message,  mtError,[mbOk],0); 
      end; 
    end;  // end punya try
    if ErrorOccured = False then 
    begin 
   
   masukan code nya jika tidak ada kesalahan yang anda inginkan
   
    end; 
  end; 
end;
user image
more 16 years ago

albie

setahuku, memang jika koneksi pakai single ADO, hanya bisa handle satu transaksi. Jadi selama transaksi belum di commit, ngga bisa start transaksi yang lain. Kalau mau, tambah ADO connectionnya... atau commit/rollback dulu transaksi sebelumnya... moga membantu
user image
more 16 years ago

ronin

Terima Kasih.. saya sebelumnya udah menggunakan teknik mas BelajarRaja. Tapi masalah mas... bahkan seandainya tidak ada perintah SQL, saat command BeginTrans dijalankan pasti muncul lagi. Mas albie, satu transaksi itu maksudnya gimana? Hanya satu kali Insert gitu? Insert keduanya jadi ndak bisa? Lha kalo transaksinya Master Detail gimana? Tapi kemarin saya coba dengan code ini sebelum BeginTrans koneksi.Attributes := [xaAbortRetaining]; koneksi.BeginTrans; Lha kok lancar. Apa ya hakekat sebenarnya? Thanks..
user image
more 16 years ago

albie

maksudnya begini, yang namanya satu paket transaksi kan dimulai begintrans dan diakhiri commit/rollbacktrans. Nah, ADOConnection hanya bisa menghandle satu paket transaksi dalam satu waktu. Coding di bawah akan lebih jelas, baris kedua akan menyebabkan error : 1.. koneksi.begintrans; 2.. koneksi.begintrans; -> ERROR krn transaksi sebelumnya belum dicommit/rollback. Hmm.. utk attribut saya belum pernah pake, tapi kemungkinan, dgn attribut itu, koneksi akan otomatis meng-abort transaksi sebelumnya jika akan dimulai transaksi yang baru.. Jawaban saya yg ini mungkin bisa aja salah, krn hanya berdasar logika saya ajah... Krn sifatnya yang meng-abort, bisa jadi transaksi sebelumnya tidak disimpan.. coba dites dulu.. misalnya begini, ada query yang isinya insert ke tabel : 1.. koneksi.Attributes := [xaAbortRetaining]; 2.. koneksi.BeginTrans; 3.. query.commandtext := 'INSERT INTO Tabel1(field1) VALUES(''TRANS_1'')'; 4.. query.execute; 5.. koneksi.begintrans; 6.. query.commandtext := 'INSERT INTO Tabel1(field1) VALUES(''TRANS_2'')'; 7.. query.execute; 8.. koneksi.committrans; program di atas, jika baris 1 dihilangkan, akan terjadi error saat eksekusi baris 5. Jika baris 1 ada, mungkin akan lancar2 saja, tapi lihat dulu di tabel1, data yang masuk kedua2nya, atau hanya 'TRANS_2'... Secara logika, yang masuk hanya 'TRANS_2'. Tes........
user image
more 16 years ago

ronin

Wah kayaknya tidak nested Transaction deh mas. Saya hanya gunakan satu perintah BeginTrans dan CommitTrans Biasanya jika mau ada perintah BeginTrans memang saya commit dulu. Jadi kelihatannya jadi kayak gini? koneksi.Attributes := [xaAbortRetaining]; 1.. koneksi.BeginTrans; 2.. query.commandtext := 'INSERT INTO Tabel1(field1) VALUES(''TRANS_1'')'; 3.. query.execute; 4.. query.commandtext := 'INSERT INTO Tabel2(field1) VALUES(''TRANS_2'')'; 5.. query.execute; 6.. koneksi.committrans; BTW, terima kasih banyak masukannya..
user image
more 15 years ago

babypigs

kalau untuk master-detail bagaimana urutan penulisan skrip nya? makasih udah boleh ikutan!
more ...
  • Pages:
  • 1
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com