BeginTrans, CommitTrans, RollbackTrans di vb6 adalah fungsi transaction dari komponen ADODB yang berfungksi untuk mengontrol jalannya sebuah eksekusi dari perintah perintah tertentu terhadap database. Sekarang perhatikan contoh sintak penyimpanan data berikut ini :
Dalam sebuah form transaksi terdapat TxtID, DTPTanggal, TxtKet, TxtIDBarang, TxtJumlah, dan sintak berikut ini menyimpan data ke tabel THEAD dan TDETAIL.
Private Sub Cmd_Save_Click()
On Error GoTo Salah
'save to table head
con.Execute "INSERT INTO THEAD (ID,TGL,KET) VALUES ('" & TxtID.Text & "','" & DTPTanggal.Value & "','" & TxtKet.Text & "')"
'save to table detail
con.Execute "INSERT INTO TDETAIL (ID,IDBRG,JUMLAH) VALUES ('" & TxtID.Text & "','" & TxtIDBarang.Text & "','" & TxtKet.Text & "')"
MsgBox "Data Tersimpan!", vbInformation, "Info"
Exit Sub
Salah:
MsgBox Err.Number & " : " & Err.Description, vbExclamation, "Warning"
End Sub
On Error GoTo Salah
'save to table head
con.Execute "INSERT INTO THEAD (ID,TGL,KET) VALUES ('" & TxtID.Text & "','" & DTPTanggal.Value & "','" & TxtKet.Text & "')"
'save to table detail
con.Execute "INSERT INTO TDETAIL (ID,IDBRG,JUMLAH) VALUES ('" & TxtID.Text & "','" & TxtIDBarang.Text & "','" & TxtKet.Text & "')"
MsgBox "Data Tersimpan!", vbInformation, "Info"
Exit Sub
Salah:
MsgBox Err.Number & " : " & Err.Description, vbExclamation, "Warning"
End Sub
Jika dilihat dari sintak diatas itu pasti akan error karena lihat yang dicetak merah (JUMLAH dan TxtKet) tidak sesuai karena seharusnya field JUMLAH (number) harus diisi dengan TxtJumlah.text, Bukan Dengan TxtKet (Keterangan). Hal hal seperti ini sering sekali terjadi dalam dunia pemrograman, bisa kerana faktor lupa, terburu buru, copypaste yang tidak diedit dan sebagainya.
Yang jadi masalah BESAR adalah simpan data ke table THEAD berhasil/sukses (karena tidak ada sintak
error) tapi simpan data ke tabel TDETAIL tidak berhasil/gagal karena masalah diatas tersebut. Jadinya data hanya tersimpan sebagian dan ini akan menjadi masalah/berpengaruh di relasi tabel, normalisi, diagram, eport/laporan dan lain lain. Nah bagainama cara mengatasi hal seperti itu ? jawabnya adalah dengan menggunakan kontrol ADODB Transaction (BeginTrans, CommitTrans, RollbackTrans). Jadi sintak simpan data diatas saya ubah menjadi :
Private Sub Cmd_Save_Click()
On Error GoTo Salah
con.BeginTrans 'save to table head
con.Execute "INSERT INTO THEAD (ID,TGL,KET) VALUES ('" & TxtID.Text & "','" & DTPTanggal.Value & "','" & TxtKet.Text & "')"
'save to table detail
con.Execute "INSERT INTO TDETAIL (ID,IDBRG,JUMLAH) VALUES ('" & TxtID.Text & "','" & TxtIDBarang.Text & "','" & TxtKet.Text & "')" con.CommitTrans
MsgBox "Data Tersimpan!", vbInformation, "Info"
Exit Sub
Salah:
con.RollbackTrans
MsgBox Err.Number & " : " & Err.Description, vbExclamation, "Warning"
End Sub
Yang jadi masalah BESAR adalah simpan data ke table THEAD berhasil/sukses (karena tidak ada sintak
error) tapi simpan data ke tabel TDETAIL tidak berhasil/gagal karena masalah diatas tersebut. Jadinya data hanya tersimpan sebagian dan ini akan menjadi masalah/berpengaruh di relasi tabel, normalisi, diagram, eport/laporan dan lain lain. Nah bagainama cara mengatasi hal seperti itu ? jawabnya adalah dengan menggunakan kontrol ADODB Transaction (BeginTrans, CommitTrans, RollbackTrans). Jadi sintak simpan data diatas saya ubah menjadi :
Private Sub Cmd_Save_Click()
On Error GoTo Salah
con.BeginTrans 'save to table head
con.Execute "INSERT INTO THEAD (ID,TGL,KET) VALUES ('" & TxtID.Text & "','" & DTPTanggal.Value & "','" & TxtKet.Text & "')"
'save to table detail
con.Execute "INSERT INTO TDETAIL (ID,IDBRG,JUMLAH) VALUES ('" & TxtID.Text & "','" & TxtIDBarang.Text & "','" & TxtKet.Text & "')" con.CommitTrans
MsgBox "Data Tersimpan!", vbInformation, "Info"
Exit Sub
Salah:
con.RollbackTrans
MsgBox Err.Number & " : " & Err.Description, vbExclamation, "Warning"
End Sub
Keterangan :
BeginTrans = memulai/menandai sebuah transaksi dan menyimpan sementara data transaksi (temporary)
CommitTrans = menandai akhir transaksi dan menyimpan semua transaksi dari temporary ke database
RollbackTrans = membatalkan transaksi dan menghapus data transaksi di temporary
Jadi tahapannya adalah :
1. Menyimpan data THEAD ke temporary (temporary ini maksudnya adalah memory) dengan sukses (tidak ada error)
2.Saat akan menyimpan data TDETAIL ternyata error seperti yang diatas, maka dengan menggunakan On Error GoTo Salah, cursor/proses akan loncat/pindah ke label Salah: dibawah dan menuju con.RollbackTrans sehingga akan membatalkan transaksi, jadi tidak ada satupun data yang tersimpan.
Namun jika anda sudah membetulkan sintak yang berwarna merak tadi maka proses akan sukses sampai con.CommitTrans dan semua data akan tersimpan dengan aman.
Sebagai ADODB Transaction dapat digunakan untuk error seperti insert duplikat primarykey, error kesalahn sintak sql, dan error lainnya yang berhibungan database. PENTING : BeginTrans harus selalu ditutup oleh CommitTrans atau RollBackTrans jika tidak anda akan menemukan error berkepanjangan di setiap form/setiap eksekusi lain karena BeginTrans belum ditutup.
Tags:
error incorrect syntax near ' ', error incorrect format unknown tag, error cannot insert duplicate key row in object with unique index, error cannot insert the value null into column id table, error violation of primary key constraint cannot insert duplicate key in object, error could not find output table, error No transaction is active, error Object required
0 komentar:
Posting Komentar