Diberdayakan oleh Blogger.

Sabtu, 09 Juli 2011

Belajar Visual Basic 25. Kode Program untuk Entri barang: simpan data


frmBarang
Berikutnya seperti telah direncanakan sebelumnya, adalah menambahkan sebuah prosedur untuk menyimpan record. Kalau kita perhatikan kembali proses yang terdapat dalam Visdata. Untuk menambahkan record dalam visdata, kita harus melakukan 3 langkah: mengklik tombol Add, kemudian mengisikan data, setelah itu mengklik tombol Update. 
Karena sekarang program kita yang membuat, bukan berarti kita harus meniru habis-habisan program Visdata yang kita contoh. Perhatikan, ternyata ada beberapa kelemahan dari proses penyimpanan record pada program Visdata. 
Kelemahan yang pertama adalah: pengguna harus mengklik add dan update untuk menyimpan record baru. Kenapa harus mengklik 2 kali tombol yang berbeda?, tidakkah bisa kita sederhanakan dengan mengklik satu tombol saja?. 
Kelemahan kedua, jika pengguna ingin mengedit data, maka dia harus menggunakan scroll bar untuk mengarahkan penunjuk record kepada record yang akan di edit. Setelah itu baru pengguna mengklik tombol edit, melakukan editing, dan setelah selesai baru melakukan proses penyimpanan. 
Langkah ini tidak akan terlalu sulit jika jumlah record hanya 20-an buah record, namun jika recordnya sudah berjumlah lebih dari seratusan, proses pengeditan akan sangat membutuhkan waktu yang lama. 
Ketiga, jika pada saat menambahkan data yang baru, ternyata kodenya sudah ada dalam database, Visdata tidak bisa melakukan proses pengeditan. Namun harus mencari kode yang sama terlebih dahulu (sama dengan kelemahan kedua). Padahal ini bisa kita sederhanakan dengan memfungsikan update untuk data yang baru, maupun mengedit data yang lama.

Kita bisa mengubah proses yang terjadi dalam penyimpanan record dengan proses sebagai berikut: Pertama biarkan si pengguna menginputkan data (baik data yang baru maupun data yang lama).
Setelah kode selesai diinputkan, lakukan proses pencarian txtkode, jika ditemukan kode barang yang sama, tampilkan semua data barang (artinya barang tersebut sudah ada). 
Sedangkan jika data belum ada, kosongkan semua isian, nama satuan, harga dan stok. Sehingga pengguna sekarang dapat membedakan bahwa ada data yang baru (ditandai dengan form yang telah kosong), dengan data yang lama (yang ditandai dengan munculnya data dari database).

Langkah berikutnya, ketika pengguna mengklik tombol simpan. Maka sekali lagi lakukan pencarian pada database, jika data yang diinputkan sudah ada (kode ditemukan), maka lakukan proses pengeditan data. Jika ternyata kode belum ada, baru lakukan langkah untuk penambahan data baru. Bukankah langkah ini bisa membuat program lebih sederhana, dan mengeliminir semua kelemahan yang dimiliki oleh Visdata?.

Pertama, kita tambahkan prosedur cmdsimpan_click, yang akan dijalankan ketika tombol cmdsimpan di klik.
  • Double click pada cmdSimpan
Gunakan ini untuk mengaktifkan event click pada cmdsimpan
  •  Pada prosedur cmdSimpan_click Tambahkan teks berikut:

Dim dbBarang As Database
    Dim rsBarang As Recordset
    Set dbBarang = OpenDatabase(App.Path & "\inventori.mdb")
    Set rsBarang = dbBarang.OpenRecordset("tbbarang")
    rsBarang.Index = "idxkode"
    rsBarang.Seek "=", txtKode.Text
    If rsBarang.NoMatch Then
          rsBarang.AddNew
     Else
If Msgbox("Data yang anda inputkan sudah ada, ingin di timpa?”,VbQuestion+vbYesno)=vbYes Then
rsBarang.Edit
Else
     Exit Sub
End If
     End If
        rsBarang!kode = txtKode.Text
        rsBarang!nama = txtNama.Text
        rsBarang!satuan = cboSatuan.Text
        rsBarang!harga = txtHarga.Text
        rsBarang!stok = txtStok.Text
        rsBarang.Update
     txtkode.text=""

  • Penjelasan:
Dari beberapa baris kode diatas, perlu dijelaskan sebagai berikut:


Dim dbBarang As Database
    Dim rsBarang As Recordset
Perintah diatas berarti memanfaatkan DAO untuk menghubungkan antara Visual Basic dengan database Inventori.Mdb. Oleh karena itu kita memerlukan Visual Basic untuk memiliki sebuah pengenal Databasenya sendiri. 

Karena VB tidak memiliki tipe data dalam bentuk sebuah database, makanya kita melakukan langkah untuk mendaftaran modul DAO dalam project kita. Dengan menggunakan DAO kita telah memiliki 2 tipe data baru, yakni tipe data Database dan tipe data Recordset.  

Dim dbBarang as Database telah membuat sebuah variabel bertipe Database , sedangkan rsBarang bertipe Recordset. Recordset mungkin belum familiar digunakan, yang dimaksud sebenarnya adalah kumpulan record atau dalam istilah kita sebelumnya disebut dengan nama tabel

Set dbBarang = OpenDatabase(App.Path & "\inventori.mdb")

Setelah database dan tabel dideklarasikan, langkah berikut adalah memasukkan database iventori.mdb kedalam variabel dbBarang. Apa yang kita lakukan terhadap dbBarang akan berpengaruh langsung terhadap database inventori.mdb. VB sekarang sudah terhubung dengan database, menggunakan DAO!.

Yang dimaksud dengan App.Path adalah sebuah property dari objek app yang menunjukkan direktori lokasi fisik dari project yang sedang aktif. Jika seandainya kita menyimpan proyek di D:\prjInventori\prjInventory.vbp, maka app.path akan berisi D:\prjInventori. 

Tentu saja ini akan bisa berjalan kalau file inventori.mdb berada dilokasi yang persis sama dengan direktori project. Kita bisa saja menggantikan app.path dengan D:\prjinventori, tetapi tentu saja program kita telah memiliki keterbatasan. Program kita tidak bisa dipindah-pindahkan, karena databasenya bersifat tetap harus di D:\prjinventori.

Kalau kita memindahkan program, berarti D:\prjinventori harus dibuat dan inventori.mdb harus dipindahkan ke sana agar program bisa berjalan. Dengan menggunakan app.path, maka program bisa lebih fleksibel. Karena app.path menunjukkan direktori mana yang sedang aktif sekarang. Untuk memindahkan program, cukup dengan memindahkan direktori prjInventori ke tempat yang kita inginkan, dan app.path akan langsung menyesuaikannya.



Set rsBarang = dbBarang.OpenRecordset("tbbarang")
Walaupun databasenya telah terhubung, bukan berarti tabel yang ada dalam database juga telah ikut terhubung. Dbbarang hanya menunjuk file fisik dari inventori.mdb yang mencakup keseluruhan komponennya, tapi tidak spesifik menunjuk ke tabel tbbarang. 
Untuk itu langkah berikut adalah memasukkan tabel tbbarang kedalam variabel rsBarang. Sama dengan penjelasan sebelumnya, apa yang akan kita lakukan terhadap rsBarang akan berpengaruh langsung terhadap tabel tbbarang.

Langkah ini sama dengan yang kita lakukan dengan Visdata, pertama kita buka Visdata (sepadan dengan menghubungkan VB dengan DAO). Kemudian kita buka database inventori.mdb (sama dengan langkah set dbBarang=...), kemudian kita klik kanan > Open pada tabel tbbarang (sama dengan langkah set rsBarang=....). Kita melakukan hal yang sama!, namun bedanya semuanya sekarang dilakukan secara otomatis! Kita tidak perlu membrowse database, dan mengklik kanan tabel. Dengan 4 baris code semua langkah tersebut telah kita selesaikan.
rsBarang.Index = "idxkode"
 
Langkah berikut adalah memanggil index dari tbbarang. Karena index berada pada tbbarang, dan tbbarang sekarang diwakili oleh rsbarang. Kita cukup menggunakan perintah diatas, perintah ini akan mengurutkan tabel tbbarang berdasarkan index idxkode. Idxkode akan mengurutkan tbbarang berdasarkan kode.

rsBarang.Seek "=", txtKode.Text
 Setelah tabel diindexkan, selanjutnya kita lakukan pencarian dengan perintah seek, tergantung dengan isi dari txtkode.text, perintah seek  akan mengembalikan nilai hasil pencarian kepada property nomatch. Jika nomatch=true, artinya tidak ditemukan data di field yang diindexkan (dalam hal ini field kode) yang sama dengan di txtkode.text. Jika nomatch=false maka artinya ditemukan data yang sama.

If rsBarang.NoMatch Then
              rsBarang.AddNew
          Else
If Msgbox("Data yang anda inputkan sudah ada, ingin di timpa?”,VbQuestion+vbYesno)=vbYes Then
rsBarang.Edit
Else
          Exit Sub
End If
          End If
 Langkah berikut tentu adalah memeriksa property nomatch dari rsbarang. Jika nomatch=true (ditandai dengan if rsbarang.nomatch) maka langkah selanjutnya adalah memanggil prosedur untuk penambahan data baru (dalam visdata jika kita mengklik tombol add maka akan disediakan sebuah record dengan field-field yang masih kosong bukan?, langkah ini sama dengan hal tersebut). 
Sedangkan jika data ditemukan (diwakili oleh klausa else yang pertama). Maka ditanya kepada user dengan menampilkan sebuah msgbox, yang akan bertanya “apakah data ingin ditimpa?”, jika si pengguna mengklik yes. Berarti rsbarang diaktifkan modus editnya.

Hal ini bisa terjadi karena pointer record sekarang sedang menunjuk kepada data yang diinputkan di txtkode. Dan jika si pengguna memilih no, maka perintah exit sub berguna untuk mengeluarkan program dari prosedur cmdsimpan_click. Artinya tidak dilakukan apa-apa terhadap data, dan form tetap tampil dalam kondisinya yang terakhir.
rsBarang!kode = txtKode.Text
        rsBarang!nama = txtNama.Text
        rsBarang!satuan = cboSatuan.Text
        rsBarang!harga = txtHarga.Text
        rsBarang!stok = txtStok.Text
        rsBarang.Update
     txtkode.text=""
cmdbersih_click

langkah terakhir adalah menyalin semua data-data yang terdapat dalam form dari masing-masing textbox kedalam field-field yang ada dalam rsbarang. Rsbarang!nama diganti isinya dengan txtnama, rsbarang!satuan diganti isinya dengan cbosatuan dan seterusnya. Prosedur ini dijalankan jika data tidak ditemukan, ataupun jika data ditemukan dengan syarat si pengguna mengklik yes pada saat msgboxnya muncul.

Berikutnya semua informasi data yang di input / diedit dikirimkan ke database dengan menggunakan rsbarang.update. Dan setelah itu txtkode dikosongkan, dan cmdbersih_click dipanggil untuk mengosongkan layar dan memulai input yang baru. Tergantung lagi nanti apakah kodenya ditemukan atau tidak.

0 komentar:

Posting Komentar