Sharing Everything From My Experience And Knowlegde |
Error Handler Generate NoUrut/Bukti Pada Multi Client Application Posted: 01 Apr 2013 03:33 AM PDT Dalam membangun aplikasi multi client (server client) ada beberapa hal yang menjadi permasalahan dasar, yaitu generate NoUrut/Bukti. Kenapa? Saya ambil contoh 1 server + database dan 2 client. Misalkan mau input transaksi penjualan dengan format nourut/bukti PJLyyyy-xxxx. Pada saat bersamaan client 1 dan client 2 menekan tombol New (Baru). sehingga pada komputer masing masing client muncul PJL2013-0001 (misalnya). Nah begitu data disimpan, baik itu secara bersamaan maupun tidak (misal client 1 terlebih dulu menekan tombol save (simpan)), itu salah satu pasti akan muncul error : "Violation of PRIMARY KEY constraint 'PK_djiesoft_trans'. Cannot insert duplicate key in object 'dbo.djiesoft_trans'" Kenapa salah satu client akan muncul error tersebut? kenapa tidak kedua client? seberanya TIDAK ADA data yang di insert secara bersamaan (Pasti di data transport TCP/IP akan terjadi queue (antrian)), jadi walaupun telihat client 1 dan 2 menekan tombol save/simpan secara bersamaan, secara system itu akan tetap terjadi queue/antrian walau hanya berbeda beberapa mili second/detik saja dan siapa yang lebih dahulu sampai/masuk ke database, dia yang akan tersimpan datanya, sisanya akan error. SO, bagaimana cara memecahkan masalah ini ? Ada beberapa cara yang dapat dilakukan, salah satu yang biasa saya lakukan adalah dengan menggunakan error handler. berikut ini contoh sintak pada tombol simpan : Private Sub btn_simpan_Click(ByValsender As System.Object, ByVal e AsSystem.EventArgs) Handles btn_simpan.Click DoTryInsert: Try 'cek/generate ulang nourut/nobukti sebelum insert myBukti = djie_generate_bukti() Usingdjie_con As NewSqlClient.SqlConnection(djie_constring) djie_con.Open() Usingdjie_cmd As NewSqlClient.SqlCommand(String.Format("INSERT INTO djiesoft_trans VALUES ({0},{1})", myBukti, "getdate()"), djie_con) djie_cmd.ExecuteNonQuery() EndUsing EndUsing Catchex As Exception SelectCase Err.Number.ToString + Mid(Err.Description, 1, 35) Case"5Violation of PRIMARY KEY constraint"'duplicate GoToDoTryInsert CaseElse MessageBox.Show(Err.Number.ToString + " : " + Err.Description, "DJIESOFT_ERR", MessageBoxButtons.OK, MessageBoxIcon.Error) EndSelect End Try End Sub Jadi saat client 1 sedang melakukan insert data, client 2 akan terus mengalami error, namun tidak ditampilkan error karena di tangkap oleh : Catchex As Exception SelectCase Err.Number.ToString + Mid(Err.Description, 1, 35) Case"5Violation of PRIMARY KEY constraint"'duplicate GoToDoTryInsert yang kemudian akan mengulangi proses simpan (ke atas) dengan dengan perintah GoTo DoTryInsert. jika client 1 sudah berhasil simpan data maka client 2 pun akan dapat menyimpan data. jika anda mempunyai ide/saran yang lain, boleh berkomentar dibawah. Selamat mencoba ... Tags: error saat simpan data, solusi duplicate saat simpan data, multi client insert data, client server arsitektur, menggunakan error handler untuk simpan data multi client, generate nobukti saat simpan data |
You are subscribed to email updates from Djiesoft, All About Source Code To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google Inc., 20 West Kinzie, Chicago IL USA 60610 |
No comments:
Post a Comment