Error Handler Generate NoUrut/Bukti Pada Multi Client Application
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 ?
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
Posting Komentar untuk "Error Handler Generate NoUrut/Bukti Pada Multi Client Application"