DjieSoft, All About Source Code


This is about programming, information technology, computers, source code, program, application and more ...
_______________________________________________________________________________{FOR EDUCATION}
Search in djiesoft

Search with Google

1.Banyak Web/Blog Lain Yang Meng-COPY Sebagian/Seluruh Content/Isi Blog DJIESOFT. BE CAREFUL !!!
2.Beberapa LINK DJIESOFT ada yang Broken karena TUSFILES menghapus file yang sudah lama/expired (1 Year).
3.Please report broken link to be re-Uploaded !

Minggu, 30 September 2012

DELETE OR UPDATE (Cara/Metode/Logika/Teknik Hapus Data Dari Table/Database)

Dari pengalaman saya, menghapus data itu TIDAK diperbolehkan baik itu data Master maupun data Transaksi, kenapa? alasannya? Baiklah saya beri contoh kasus seperti ini : Master data yang sudah digunakan di table lain (ber-relasi) tidak boleh dihapus karena akan berpengaruh pada data di table lain. Contoh :
Master_Supplier
Kode_SupplierName
S01SupplierA
S02SupplierB
Nama_BarangVarchar(50)

Transaksi_Head_Beli
Kode_BeliKode_Supplier Tanggal
B120101-001S0101/01/2012
B120101-002S0201/02/2012

Jika ada menghapus data supplier (misalnya dari form master supplier), maka effect nya adalah :
1.Report Transaksi Pembelian tidak akan muncul semua jika anda menggunakan query :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli    AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"
dengan query diatas maka yang muncul hanya transaksi "B120101-002" saja
2.Report Transaksi Pembelian Akan muncul semua tetapi sebagian data Supplier akan kosong (NULL), jika
anda menggunakan query :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli    AS A LEFT JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"

Lalu bagaimana dengan "Tombol Hapus" pada form? terus bagaimana jika ada supplier yang sudah tidak
dipakai? Jawabannya adalah dengan mengganti perintah "DELETE" dengan "UPDATE" dan menambahkan (1 field/column "rec_status") dengan (DataType = Bit) di setiap table, yang artinya jika (0 = deleted) dan (1 = active) jadi struktur table nya menjadi seperti ini :
Master_Supplier
Kode_SupplierName Rec_Status
S01SupplierA0
S02SupplierB1

Transaksi_Head_Beli
Kode_BeliKode_Supplier TanggalRec_Status
B120101-001S0101/01/20121
B120101-002S0201/02/20121

Sehingga anda akan lebih leluasa lagi membuat Jenis Reportnya, contoh :
1.Jika anda ingin menampilkan semua Report Transaksi Pembelian, baik itu data supplier/ data transaksi yang active dan terhapus:
"SELECT A.*, B.Name FROM Transaksi_Head_Beli    AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier"
2.Jika anda hanya ingin menampilkan Report yang suppliernya active saja, maka hasilnya akan menampilkan "B120101-002" :
"SELECT A.*, B.Name FROM Transaksi_Head_Beli    AS A JOIN Master_Supplier AS B ON A.Kode_Supplier = B.Kode_Supplier WHERE A.REC_STATUS=1"
Ubah A.Rec_Status=0 jika anda ingin menampilkan Report sebaliknya

Selain itu salah satu keuntungan menggunakan UPDATE+Rec_Status ini adalah memperkecil penurunan performance database, karena jika menghapus data (DELETE) itu akan mengubah susunan index recordset/row pada table, maka semakin lama susunan nya akan semakin rumit/acak dan harus di Shrink Database (jika di windows itu adalah Defragment Hardisk).

Penjelasan tambahan untuk sintak pata tombol HAPUS di form anda dapat menggantinya seperti ini:
"UPDATE Master_Supplier SET Rec_Status=0 WHERE Kode_Supplier='S01'"

Penjelasan tambahan untuk sintak pencarian data supplier (pilih supplier) di form transaksi pembelian :
"SELECT * FROM Master_Supplier  WHERE Rec_Status=1"

Jadi intinya ubah paradigma DELETE menjadi UPDATE dan selalu ikut sertakan field Rec_Status pada setiap SELECT data. Apa yang saya tulis ini bukanlah sebuah kewajiban atau aturan yang harus dilakukan, semua orang mempunyai persepsi dan logika tersendiri dalam berkarya.

Tags:
cara hapus data yang benar, cara delete data yang baik, sintak untuk delete data, berapa lama tahun data perusahaan,

Related Post:

4 komentar:

  1. Mas, ane mw nanya nih. ane punya tabel :

    1.tblbarang {kdbrg, nmbrg, kdjenis, kdsatuan, hrgbli, hrgjual}
    2.tbl jenis_barang {kdjenis, jnsbrg}
    3.tblsatuan_barang {kdsatuan, stnbrg}

    Trus saya buat view_barang, field yang saya ambil (kdbrg, nmbrg, jnsbg, stnbrg, hrgbeli, hrgjual).

    Pada VB, FormInputBarang ane rancang sesuai dengan field view_barang.

    kalo untuk nampilin ke datagrid, kan tinggal panggil view_barang.

    Tapi untuk coding simpan ke tblbarang gimana mas??
    Soalnya kalo pake insert into tblbarang, kan value nya gak sama.

    apa harus insert into view_barang??



    BalasHapus
    Balasan
    1. jadi yg malash itu untuk insert kdjenis, kdsatuan nya ya, karena tidak tampil di datagird/view.
      nah yg jdi pertanyaan adalah cara simpannya gimana ? apakah :
      1.dari textbox (setelah data dinaikan keatas/double click datagrid) ?
      2.looping ke datagrid yg nilaionya udah berubah?

      solusi :
      1.juka pake textbox kan ga ada masalah, karena datanya pasti terisi semua kan ...
      2.klo looping ke datagrid, mungkin salah satunnya adalah harus tampilih semua fieldnya (di viewnya)

      Hapus
  2. mas pandji, bisa gak nyimpan data tanggal ke databse mysql dengan VB.net dengan format kita atur sendiri??
    kan defaultnya "YYYY-MM-DD"..
    Kalo kita mau ganti dengan format/urutan "DD-MM-YYYY" gimana caranya mas??

    BalasHapus
    Balasan
    1. saya blm pernah coba, setahu saya data datetime disimpan dengan defaultnya database,
      kita hanya dapat merubah format setiap kita SELECT atau lewat pemrogramman

      Hapus