Home > Visual Basic > Mengakses tabel via kelas

Mengakses tabel via kelas

February 14, 2010

Artikel kita kali ini khusus bagi Anda yang sudah terbiasa membuat aplikasi database menggunakan Visual Basic 6 tetapi untuk mengeksekusi perintah-perintah DML (Insert, Update, Delete dan Select) masih di lakukan di Form/Modul.

Dan diartikel ini juga kita akan sedikit mencoba memasuki daerah suram bagi kebanyakan programmer prosedural seperti Saya dan Anda😀 yang biasa disebut OOP.

Kenapa menggunakan kelas dan teori-teori seputar kelas bisa anda baca referensi-referensi yang berhubungan dengan OOP di Visual Basic 6, walaupun Visual Basic 6 sendiri belum bisa dikatakan bahasa pemrograman yang full OOP. Setidaknya itu yang saya baca dari referensi-referensi yang ada, kalo salah mohon dikoreksi🙂.

Oke kita langsung saja mempersiapkan dan mempraktikkan langkah-langkah apa saja yang perlu dilakukan untuk membuat kelas.

Ingat >> Practice, practice, practice! Practice makes perfect🙂 <<

Untuk contoh kita akan membuat kelas siswa dari rancangan tabel berikut :

1. Buat project baru

2. Tambahkan Class Module dan disini kita hanya akan membahas membuat kelas private (bukan sebagai project terpisah) hanya untuk menyederhanakan pembahasan

kemudian ganti namanya menjadi clsSiswa

3. Membuat Properties

Salah satu kegunaan properties adalah untuk melewatkan data dari objek luar kelas, contoh untuk membuat properties nomorinduk :

Private mNomorInduk As String 'm untuk prefix Member

'untuk mengeset nilai properties
'jika kode ini tidak kita buat maka sifat dari propertiesnya adalah readonly
Public Property Let nomorInduk(ByVal vData As String)
    mNomorInduk = vData
End Property

'untuk membaca nilai properties
Public Property Get nomorInduk() As String
    nomorInduk = mNomorInduk
End Property

Ulangi langkah-langkah no. 3 untuk membuat properties yang lain: nama, alamat dan nilai. Selain itu kita juga akan menambahkan private variabel dengan tipe recordset kita sebut saja namanya mRs, sesuai tipenya variabel ini digunakan untuk menampung hasil SELECT.

Hasil akhir source code untuk membuat propertiesnya adalah sebagai berikut :

Option Explicit

Private mRs             As ADODB.Recordset

Private mNomorInduk     As String 'm untuk prefix Member
Private mNama           As String
Private mAlamat         As String

'untuk mengeset nilai properties
'jika kode ini tidak kita buat maka sifat dari propertiesnya adalah readonly
Public Property Let nomorInduk(ByVal vData As String)
    mNomorInduk = vData
End Property

'untuk membaca nilai properties
Public Property Get nomorInduk() As String
    nomorInduk = mNomorInduk
End Property

Public Property Let nama(ByVal vData As String)
    mNama = vData
End Property
Public Property Get nama() As String
    nama = mNama
End Property

Public Property Let alamat(ByVal vData As String)
    mAlamat = vData
End Property
Public Property Get alamat() As String
    alamat = mAlamat
End Property

4. Menambahkan method

Method dalam istilah pemrograman terstruktur biasanya dikenal dengan istilah fungsi/prosedur, disini kita akan membuat method-method yang mewakili perintah DML SQL :

  • Insert -> addData : Boolean
  • Update -> editData : Boolean
  • Delete -> deleteData : Boolean
  • Select -> startGetData : Long + getData

Contoh kita akan menambahkan method addData :

Public Function addData() As Boolean
    On Error GoTo errHandle

    strSql = "INSERT INTO siswa (nomorinduk, nama, alamat) VALUES ('" & _
             rep(nomorInduk) & "', '" & rep(nama) & "', '" & rep(alamat) & "')"
    conn.Execute strSql

    addData = True

    Exit Function
errHandle:
    addData = False
End Function

Selanjutnya buat juga untuk method-method lainnya :

Public Function editData() As Boolean
    On Error GoTo errHandle

    strSql = "UPDATE siswa SET nama = '" & rep(nama) & "', alamat = '" & rep(alamat) & "' " & _
             "WHERE nomorinduk = '" & rep(nomorInduk) & "'"
    conn.Execute strSql

    editData = True

    Exit Function
errHandle:
    editData = False
End Function

Public Function delData() As Boolean
    On Error GoTo errHandle

    strSql = "DELETE FROM siswa WHERE nomorinduk = '" & rep(nomorInduk) & "'"
    conn.Execute strSql

    delData = True

    Exit Function
errHandle:
    delData = False
End Function

Karena method startGetData dan getData adalah satu paket maka kita akan menggunakan pendekatan yang sedikit berbeda :

Public Function startGetData() As Long
    On Error GoTo errHandle

    strSql = "SELECT nomorinduk, nama, alamat " & _
             "FROM siswa " & _
             "ORDER BY nama"
    Set mRs = openRecordset(strSql)
    If Not mRs.EOF Then startGetData = getRecordCount(mRs)

    Exit Function
errHandle:
    startGetData = 0
End Function

Public Sub getData()
    On Error Resume Next

    mNomorInduk = IIf(IsNull(mRs("nomorinduk").Value), "", mRs("nomorinduk").Value)
    mNama = IIf(IsNull(mRs("nama").Value), "", mRs("nama").Value)
    mAlamat = IIf(IsNull(mRs("alamat").Value), "", mRs("alamat").Value)
    mNilai = IIf(IsNull(mRs("nilai").Value), 0, mRs("nilai").Value)

    mRs.MoveNext
End Sub

'setelah pemanggilan method startGetData
'hasil recordset sebaiknya dihapus dari memory
Public Sub endGetData()
    Call closeRecordset(mRs)
End Sub

Sampai disini persiapan membuat kelas sudah selesai dan langkah selanjutnya kita akan mencoba menggunakan kelas siswa berikut properties dan methodnya.

Ingat kelas siswa tidak bisa langsung digunakan jadi kita harus mendeklarsikan sebuah var objek dengan tipe clsSiswa, contoh :

Private Sub cmdTesBuatObjek_Click()
    'deklarsi var objSiswa, sampai disini masih belum bisa digunakan
    Dim objSiswa    As clsSiswa

    'membuat objek clsSiswa dg nama objSiswa
    Set objSiswa = New clsSiswa

    'dan jangan lupa dihapus setelah selesai digunakan
    Set objSiswa = Nothing
End Sub

Selanjutnya kita baru bisa menggunakan properties dan method yang ada di kelas siswa :

Private Sub cmdSimpan_Click()
    Set objSiswa = New clsSiswa
    With objSiswa
        .nomorInduk = "02024113"
        .nama = "KoKom Armagedon"
        .alamat = ""

        result = .addData
    End With
    Set objSiswa = Nothing

    If result Then
        MsgBox "Data sudah disimpan", vbInformation, "Informasi"

    Else
        MsgBox "Data siswa gagal disimpan", vbExclamation, "Peringatan"
    End If
End Sub

Private Sub cmdEdit_Click()
    Set objSiswa = New clsSiswa
    With objSiswa
        .nomorInduk = "02024113"
        .nama = "K4m4r82"
        .alamat = "Yogyakarta"

        result = .editData
    End With
    Set objSiswa = Nothing

    If result Then
        MsgBox "Perubahan data sudah disimpan", vbInformation, "Informasi"

    Else
        MsgBox "Data siswa gagal disimpan", vbExclamation, "Peringatan"
    End If
End Sub

Private Sub cmdDelete_Click()
    Set objSiswa = New clsSiswa
    With objSiswa
        .nomorInduk = "02024113"
        result = .delData
    End With
    Set objSiswa = Nothing

    If result Then
        MsgBox "Data siswa sudah dihapus", vbInformation, "Informasi"

    Else
        MsgBox "Data siswa gagal dihapus", vbExclamation, "Peringatan"
    End If
End Sub

Private Sub cmdTampilkanData_Click()
    Dim i       As Long

    Set objSiswa = New clsSiswa
    With objSiswa
        Screen.MousePointer = vbHourglass
        DoEvents

        'saya disini menggunakan perulangan for untuk menampilkan data
        'biasanya kita untuk menampilkan data dari recordset menggunakan
        'perulangan : do while not varRs.EOF atau semisalnya
        'hasil survey membuktikan menggunakan for lebih cepat
        For i = 1 To .startGetData
            Call .getData

            Debug.Print "Nomor Induk : " & .nomorInduk
            Debug.Print "Nama : " & .nama
            Debug.Print "Alamat : " & .alamat

        Next i
        Call .endGetData

        Screen.MousePointer = vbDefault
    End With
    Set objSiswa = Nothing
End Sub

Contoh outpu program :

Untuk source codenya bisa didownload disini.

Selamat mencoba🙂

  1. Sanca
    February 17, 2010 at 12:49 am

    bang boleh request artkel gak..?

    artikel tentang VB+Gammu+MsAccess.

    mungkin bang udah tau kan maksudnya kalo bicara gammu, pasti smsgateway. hehehe…

    saya sudah bisa sms lewat gammu. cuma databasenya masih kesimpen di localhost (mysql). saya pengen tau cara nya bikin smsgateway, tapi menggunakan gammu. dan databasenya menggunakan Msaccess yang di dalamnya ada nomer contact(nomor, nama,alamat), INBOX dan OUTBOX.

    kalo berkenan, saya mohon dibuatkan.

    YM: hackhacker10
    E-mail: hackhacker10@yahoo.com
    thanks.

  2. February 17, 2010 at 2:22 am

    Sanca :

    bang boleh request artkel gak..?

    artikel tentang VB+Gammu+MsAccess.

    mungkin bang udah tau kan maksudnya kalo bicara gammu, pasti smsgateway. hehehe…

    saya sudah bisa sms lewat gammu. cuma databasenya masih kesimpen di localhost (mysql). saya pengen tau cara nya bikin smsgateway, tapi menggunakan gammu. dan databasenya menggunakan Msaccess yang di dalamnya ada nomer contact(nomor, nama,alamat), INBOX dan OUTBOX.

    kalo berkenan, saya mohon dibuatkan.

    YM: hackhacker10
    E-mail: hackhacker10@yahoo.com
    thanks.

    Saya emang ada rencana juga untuk membahas artikel mengenai sms gateway, cuma belum diputuskan apakah nanti pake gammu atw alternatif lain.
    Tapi coba searching dulu soalnya udah banyak yang ngebahas mengenai pembuatan sms gateway.

  3. April 6, 2010 at 8:15 am

    Mas, saya mau tanya, buat tampilan source code seperti di atas pake plug in apa ya kalo di WP. Blog saya juga pake WP tapi belum ketemu plug ini seperti ini. Tks ya infonya….

  4. April 6, 2010 at 8:41 am

    blogbeken :

    Mas, saya mau tanya, buat tampilan source code seperti di atas pake plug in apa ya kalo di WP. Blog saya juga pake WP tapi belum ketemu plug ini seperti ini. Tks ya infonya….

    enggak pake plug-in kok, cukup pake perintah berikut :

    [-sourcecode language=”css”]
    ketik source code disini
    [/sourcecode]

    tanpa tanda minus (-)

    Selamat mencoba🙂

  5. June 24, 2010 at 7:38 am

    Lagi belajar class ni oM tp ga mudeng…

    • June 24, 2010 at 7:53 am

      Yang sabar om😀, banyak kok artikel yg lebih rinci yg membahas pembuatan kelas di vb

  6. July 2, 2010 at 4:43 pm

    Om, mau tanya.. tujuan buat propertie nomerinduk dll, itu buat apa ya? apa boleh ga ada itunya, klo liat source code siInfo ko penulisan kelasnya berbeda…??😕

    • July 2, 2010 at 10:22 pm

      Iya om kegunaan properties itu kan mirip parameter dari sebuah method/function jadi tujuan intinya untuk melewatkan nilai dari objek yg memanggil kelas tersebut.

      Cuma klo lewat parameter kan agar ribet kalo nilai yg dilewatkan terlalu banyak contoh data siswa, fieldnya kan banyak banget. Kayaxnya kurang indah klo semuanya dilewatkan lewat parameter😀.

      Iya sih om sample kelas di artikel ini emg beda dg yang di SISFO, yg di SISFO kan sy baru belajar buat kelas ha ha ha🙂.

  7. August 20, 2010 at 9:17 am

    Om, mau tanya lagi, waktu pake database akses pake kelas yg SISFO lancar2 aja, tapi pas ganti ke my SQL ada error “the rowset is not bookmarkable” di kelas getData itu mungkin harus di tambahin CursorLocation = adUseClient, nah nambahin itunya di mana om?? atau bagaimana caranya om biar ga error? :ympuyeng ^:)^

  8. August 20, 2010 at 9:22 am

    Udah ketemu om, solusinya.. hehee… sory ngotorin komen2nya…😀

  9. August 20, 2010 at 11:22 am

    Qie.. :

    Udah ketemu om, solusinya.. hehee… sory ngotorin komen2nya… :D

    Huuhhh dasar udah tau nanya he he he😀

  10. Newbie
    July 22, 2011 at 7:51 am

    sy nyoba kok error ya om

    lvwReport “Variable not define”

    Mohon pencerahannya,maklum baru belajar…thx

    • July 22, 2011 at 9:15 am

      Mendingan langsung coba kode jadinya aja om disini.

  11. Belajar
    August 6, 2011 at 6:59 pm

    Sebelumnya maaf om saya comment bingung mau di tag mana.. ya akhirnya pd tag ini aja soalnya sya liat ada listview..😀
    Langsung aja om,,, saya mau tnya :
    Om.. gimana kalo grouping pada listview?? kaya tabel pada Microsoft Access, bila tabel2 telah diisi dan terelasi, di klik di record primary pada tabel headernya, muncul tabel detailnya.. (Misalkan sperti itu)
    Yaa kalo ga bisa pke listview jg ga apa2.. yg penting bisa sperti tabel di access..
    ato ada solusi lain om..
    Mohon bantuanya om.. terima kasih sebelumnya..🙂

    • August 8, 2011 at 1:43 am

      Klo listview mungkin agak ribet, mungkin om bisa coba komponen microsoft hierarchical flexgrid control

  12. agung
    August 7, 2011 at 11:05 pm

    he he he, saya suka sekali dengan istilah “suram…”. Dan pepatah yang tepat untuk artikel ini adalah “Habis gelap terbitlah terang”

    Nice Share…very good…

    • August 8, 2011 at 1:43 am

      Oke om tq udah mampir🙂
      Sekalian ikuti lanjutannya disini om😀

  13. July 1, 2012 at 5:09 pm

    kenapa harus gini kanG admin

    Private mNomorInduk As String 'm untuk prefix Member
    
    'untuk mengeset nilai properties
    'jika kode ini tidak kita buat maka sifat dari propertiesnya adalah readonly
    Public Property Let nomorInduk(ByVal vData As String)
        mNomorInduk = vData
    End Property
    
    'untuk membaca nilai properties
    Public Property Get nomorInduk() As String
        nomorInduk = mNomorInduk
    End Property
    

    saya coba bikin gini aja bisa kang

    Public mNomorInduk as String
    

    Apa bedanya ya.?

    Matur Nuwon before.

    • July 6, 2012 at 1:17 pm

      Klo kode yg sy buat diatas menerapkan salah satu konsep OOP yaitu enkapsulasi, dimana variabel mNomorInduk tidak boleh diakses secara langsung dari luar kelas tetapi

      harus melalui method Accessor dan mutatornya klo di VB dikenal dengan istilah property.

      Coba deh baca lagi referensi tentang enkapsulasi.

      • July 6, 2012 at 1:37 pm

        oke mas rudi. terimakasih atas pencerahanya.
        maaf nih. kalo boleh ane mau curhat: sebenernya saya udah 2 thn ini make vb6 itu juga karena kebetulan. t4 kerja saya dulu pake vb6, tapi itu juga asal2 an aja menurut aku. jadi bikinya. asal bisa insert, update, delete. dll. jadi mungkin bisa dibilang ga sesuai yang seharusnya(prosedur).
        Dan dari blognya mas rudi ini. saya mendpat banyak pencerahan tentang bagaimana membuat program yang lebih benar dari sebelumnya. paling tidak.
        tapi meski cuma program asal2an buat nya. tapi udah bisa buat ngorder juga.🙂
        Sebelum ana beranjak dari vb6, ke next level.
        Kalo boleh saya mau minta referensi apa saja yang perlu dimatang kan, atau yang perlu diketahui dari pembuatan program dengan vb6 ini. Karena ana pikir itu nanti bisa digunakan untuk next level nya.

        Maaf kalo tulisane bikin mumet.😀

        Terimakasih.

  14. July 7, 2012 at 1:04 pm

    Klo referensi ya terlalu banyak om, jadi mendingan fokus mencari solusi terhadap kasus yg kita hadapi jadi enggak perlu kita pelajari semua teknik pemrograman.

    Untuk referensi tambahan printah INSERT, UPDATE, DELETE dan SELECT mungkin om bisa coba artikel sy yg disini.

    Dan untuk naik ke level berikutnya kayaxnya enggak perlu ditargetin deh om, jadi dibanyakin aja orderannya, semakin banyak orderan kan semakin banyak kasus yg kita hadapi😀, dan akhirnya… pelan2x tapi pasti tanpa kita sadari ternyata kita sudah menjadi seorang master😀.

    • July 7, 2012 at 2:46 pm

      ow gitu ya mas.
      sip-sips.. oke deh kalo gitu.
      jadi sekarang belajar sambil jalan aja. biar tidak membuang-buang waktu.

      terimakasih mas rudi atas saranya. doa in ya. biar bisa jadi master kayak mas rudi. atau besok mau nyusul mas rudi.😀

      • July 7, 2012 at 8:27 pm

        Amin🙂

  15. April 9, 2013 at 7:14 pm

    Seperti masaris06 saya juga menemukan banyak pencerahan diblog ini untuk belajar vb6 terima kasih mas Rudi

    • April 10, 2013 at 3:57 pm

      Sama2x om

  16. MuchsinArdi
    April 16, 2013 at 10:25 pm

    mas admin, kalau untuk yang menggunakan database mysql cara koneksiin di module coding nya gimana ya?

    • April 17, 2013 at 2:48 pm

      Coba kesini om.

  17. MuchsinArdi
    April 18, 2013 at 5:02 pm

    om saya dapet pesan debug saat me-runing program, ternyata masalahnya ada pada kalimat ” obj.Open query, conn, adOpenForwardOnly, adLockReadOnly”
    mohon penjelasannya om

    • April 25, 2013 at 11:36 am

      Jelasin g mana om ? Emg pesan errornya apa ?

  18. Muchsin Ardi
    April 26, 2013 at 7:48 pm

    gini om ceritanya, coding yg om kasih kan pake database acsess
    nah saya nyoba pake database mysql, cm setiap saya running hasil nya pasti debug
    mohon penjelasannya om untuk coding di module database nya kalau menggunakan database mysql bagaimana??

    • April 27, 2013 at 5:14 am

      Klo untuk mengakses MySQL membutuhkan MySQL Connector/ODBC, jadi silahkan diinstall dulu.

      Selain itu string koneknya juga perlu disesuaikan, untuk contohnya om bisa lihat disini.

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: