Mengakses tabel via kelas

Posted by Kamarudin • 5 minute read • Comments

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 :grin: 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 :blush: «

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 :blush:

Comments