Oke…
Transaction Object adalah objek yang biasanya dipakai untuk menjaga keselarasan data yang masuk kedalam 2 tabel atau lebih…. jadi prinsip nya… “satu tabel gagal eksekusi… semua dibatalkan….” .. kira – kira seperti itu lah salah satu kasusnya… meskipun nanti lebih luas lagi pemakaiannya… depend on experience
Kasus yang paling umum adalah pada saat melakukan penyimpanan data ke tabel transaksi yang biasanya terdiri dari 2 tabel atau lebih…Header dan Detail nya.. ( ini mungkin.. kenapa dinamakan Transaction Object… karena buat transaksi… hee.. mungkin…)
langsung aja kita ke TKP… …
saya berasumsi mempunyai 2 tabel… SalesHeader dan SalesDetail dengan skema sebagai berikut :
desain form sebagai berikut :
kemudian pada bagian general declaration seperti biasa taruh connection string dan connection Object :- Dim ConnectionString As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=Data.mdb"
- Dim cn As New OleDb.OleDbConnection(ConnectionString)
- Dim sqlHeader As String = String.Empty
- Dim sqlDetail As String = String.Empty
- 'ini query nya... Header dan Detail
- sqlHeader = String.Format("INSERT INTO SalesHeader VALUES ('{0}',#{1}#,'{2}')", _
- txtInvoiceNo.Text, dtpTransaction.Value, txtDescription.Text)
- 'deklarasi object transaction
- Dim trax As OleDb.OleDbTransaction = Nothing
- Dim cmdHeader As New OleDb.OleDbCommand(sqlHeader, cn)
- Dim cmdDetail As New OleDb.OleDbCommand
- cmdDetail.Connection = cn
- Try
- cn.Open() ' open before execute
- trax = cn.BeginTransaction
- cmdHeader.Transaction = trax
- cmdDetail.Transaction = trax
- cmdHeader.ExecuteNonQuery()
- For Each rows As DataGridViewRow In gvDetailProduct.Rows
- If rows.IsNewRow = False Then
- sqlDetail = String.Format("INSERT INTO SalesDetail VALUES ('{0}','{1}',{2})", _
- txtInvoiceNo.Text, _
- rows.Cells(0).Value, _
- rows.Cells(1).Value)
- cmdDetail.CommandText = sqlDetail
- cmdDetail.ExecuteNonQuery()
- End If
- Next
- trax.Commit()
- MessageBox.Show("saved successfully...")
- Catch ex As Exception
- If trax IsNot Nothing Then
- trax.Rollback()
- End If
- MessageBox.Show(ex.Message)
- Finally
- cn.Close() ' must close after execute
- End Try
fyuhh… aga panjang yaah..??? :p
yang terpenting yang perlu diingat adalah langkah-langkah pembuatanya…
- Deklarasikan transaction object
- Setelah connection di open… lakukan perintah cn.BeginTransaction
- Masukkan transaction object pada masing – masing command
- lakukan commit setelah command object telah berhasil di eksekusi semua dengan perintah contoh trax.Commit
- letakkan coding trax.Rollback pada bagian Catch untuk membatalkan semua eksekusi Command Object apabila terjadi error…
kemudian tekan tombol save….
kemudian dicoba lagi dengan data yang lain dan kita buat error…. misal pada bagian ProductID…. isi ProductId lebih dari 5 digit ( ini menyebabkan error karena kolom productID yang dibuat dibatasi hanya 5 karakter) apa hasil nya ??
hasil nya… Data pada SalesHeader dan SalesDetail kompak sama – sama tidak masuk ke tabel… betul ??
Happy coding….
Belum ada tanggapan untuk "Codding VB.NET SIMPAN (SAVE)"
Post a Comment