Codding VB.NET SIMPAN (SAVE)

Command Object bagian 4 membahas Transaction Object seperti SqlTransaction atau OledbTransaction. Object ini yang paling sering diabaikan oleh developer pemula… ( padahal pengalaman pribadi :D ) karena mungkin belum mengerti fungsi dan bagaimana cara menggunakan object tersebut…. dan satu lagi… belum mengerti… seberapa pentingnya object tersebut…

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 :D
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… :D
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 :
  1. Dim ConnectionString As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=Data.mdb"  
  2. Dim cn As New OleDb.OleDbConnection(ConnectionString)
 pada tombol save.. ketikkan coding sebagai berikut :
  1. Dim sqlHeader As String = String.Empty  
  2. Dim sqlDetail As String = String.Empty  
  3.   
  4. 'ini query nya... Header dan Detail  
  5. sqlHeader = String.Format("INSERT INTO SalesHeader VALUES ('{0}',#{1}#,'{2}')", _  
  6.                 txtInvoiceNo.Text, dtpTransaction.Value, txtDescription.Text)  
  7.   
  8. 'deklarasi object transaction  
  9. Dim trax As OleDb.OleDbTransaction = Nothing  
  10.   
  11. Dim cmdHeader As New OleDb.OleDbCommand(sqlHeader, cn)  
  12. Dim cmdDetail As New OleDb.OleDbCommand  
  13. cmdDetail.Connection = cn  
  14.   
  15. Try  
  16.      cn.Open() ' open before execute  
  17.      trax = cn.BeginTransaction  
  18.      cmdHeader.Transaction = trax  
  19.      cmdDetail.Transaction = trax  
  20.   
  21.      cmdHeader.ExecuteNonQuery()  
  22.      For Each rows As DataGridViewRow In gvDetailProduct.Rows  
  23.          If rows.IsNewRow = False Then  
  24.             sqlDetail = String.Format("INSERT INTO SalesDetail VALUES ('{0}','{1}',{2})", _  
  25.                                               txtInvoiceNo.Text, _  
  26.                                               rows.Cells(0).Value, _  
  27.                                               rows.Cells(1).Value)  
  28.   
  29.             cmdDetail.CommandText = sqlDetail  
  30.             cmdDetail.ExecuteNonQuery()  
  31.          End If  
  32.    Next  
  33.        trax.Commit()  
  34.        MessageBox.Show("saved successfully...")  
  35.    Catch ex As Exception  
  36.        If trax IsNot Nothing Then  
  37.            trax.Rollback()  
  38.        End If  
  39.        MessageBox.Show(ex.Message)  
  40.    Finally  
  41.        cn.Close() ' must close after execute  
  42.    End Try 
 ---------------------------------------------------
fyuhh… aga panjang yaah..??? :p
yang terpenting yang perlu diingat adalah langkah-langkah pembuatanya…
  1. Deklarasikan transaction object
  2. Setelah connection di open… lakukan perintah cn.BeginTransaction
  3. Masukkan transaction object pada masing – masing command
  4. lakukan commit setelah command object telah berhasil di eksekusi semua dengan perintah contoh trax.Commit
  5. letakkan coding trax.Rollback pada bagian Catch untuk membatalkan semua eksekusi Command Object apabila terjadi error…
Nah… silahkan dicoba… contoh :

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…. :)

Postingan terkait:

Belum ada tanggapan untuk "Codding VB.NET SIMPAN (SAVE)"

Post a Comment