Tuesday, April 2, 2013

Sharing Everything From My Experience And Knowlegde

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

No comments:

Post a Comment