Mengakses database SQLite menggunakan library dhSQLite

Posted by Kamarudin • 3 minute read • Comments

Ada yang kurang di artikel sebelumnya, yaitu saya belum membahas bagaimana mengakses database SQLite dalam pembuatan aplikasi database.

Secara umum aksi yang sering dilakukan dalam pembuatan aplikasi database hanya seputar pernyataan DML (Insert, Update, Delete dan Select), jadi untuk menyederhanakan pembahasan saya pun membatasi artikel kali ini hanya seputar permasalahan tersebut.

Sebenarnya cukup dengan library ADO pun kita sudah bisa mengakses database SQLite, tetapi pada artikel kali ini saya menggunakan library dhSQLite.

Untuk mengakses database SQLite menggunakan dhSQLite kita cukup menggunakan 3 kelas yaitu :

  1. cConnection, sesuai namanya kelas ini digunakan untuk membuat koneksi ke database
  2. cRecordset, digunakan untuk menampung pernyataan select
  3. cCommand, digunakan untuk mengeksekusi pernyataan insert, update dan delete

sedangkan untuk sample database bisa langsung Anda download disini.

1. Membuat koneksi

Tambahkan sebuah modul, kemudian ketik kode berikut :

Public Function openDb() As Boolean
    On Error GoTo errHandle

    Set conn = New cConnection
    conn.openDb "C:\dbpos\dbpos.db3"
    openDb = True

    Exit Function
errHandle:
    openDb = False
End Function

dengan asumsi database dbpos.db3 sudah ada di folder C:\dbpos.

Untuk mencoba fungsi openDb diatas, kita akan memanfaat prosedur Main berikut :

Public Sub Main()
    Dim ret As Boolean

    ret = openDb
    If ret Then
        'TODO : tampilkan form utama
    Else
        MsgBox "Koneksi gagal", vbExclamation, "Peringatan"
    End If
End Sub

Tentunya agar prosedur Main tersebut bisa dijalankan, kita harus merubah Startup Object menjadi Sub Main.

2. Menambahkan data

Menambahkan data menggunakan objek cCommand sangat mudah sekali, lihat kode berikut :

Private Sub cmdSimpan_Click()
    Dim cmd As cCommand

    strSql = "INSERT INTO barang (kode_barang, nama_barang, stok, harga_beli, harga_jual) VALUES (?, ?, ?, ?, ?)"
    Set cmd = conn.CreateCommand(strSql)
    With cmd
        .SetText 1, txtKodeBarang.Text
        .SetText 2, txtNamaBarang.Text
        .SetDouble 3, Val(txtStok.Text)
        .SetDouble 4, Val(txtHargaBeli.Text)
        .SetDouble 5, Val(txtHargaJual.Text)
        .Execute
    End With
    Set cmd = Nothing
End Sub

Mirip sekali bukan menambahkan data menggunakan interface PreparedStatement di java :grin:

Angka 1,2 .. 5 merupakan urutkan field pada pernyataan dml, sedangkan method yang dipanggil setelah berhasil menciptakan objek cCommand sesuai dengan tipe data field.

Contoh kode barang bertipe varchar, maka method yang dipanggil adalah SetText, sedangkan stok, harga beli dan harga jual bertipe numeric makanya method SetDouble yang dipanggil dan jika bertipe integer tinggal panggil aja method SetInt32 dan begitu seterusnya.

Oke kita lihat lagi pada pernyataan berikutnya.

3. Mengedit data

Private Sub cmdEdit_Click()
    Dim cmd As cCommand

    strSql = "UPDATE barang SET nama_barang = ?, stok = ?, harga_beli = ?, harga_jual = ? " & _
             "WHERE kode_barang = ?"
    Set cmd = conn.CreateCommand(strSql)
    With cmd
        .SetText 1, txtNamaBarang.Text
        .SetDouble 2, Val(txtStok.Text)
        .SetDouble 3, Val(txtHargaBeli.Text)
        .SetDouble 4, Val(txtHargaJual.Text)
        .SetText 5, txtKodeBarang.Text
        .Execute
    End With
    Set cmd = Nothing
End Sub

4. Menghapus data

Private Sub cmdHapus_Click()
    Dim cmd As cCommand

    strSql = "DELETE FROM barang WHERE kode_barang = ?"
    Set cmd = conn.CreateCommand(strSql)
    With cmd
        .SetText 1, txtKodeBarang.Text
        .Execute
    End With
    Set cmd = Nothing
End Sub

5. Menampilkan data

Untuk menampilkan data kita menggunakan pernyataan SELECT, dan ingat pernyataan SELECT mengembalikan data dalam bentuk recordset, sehingga kita harus membuat objek dengan tipe cRecordset.

Private Sub cmdTampilkan_Click()
    Dim rs  As cRecordset

    strSql = "SELECT kode_barang, nama_barang, stok, harga_beli, harga_jual " & _
             "FROM barang " & _
             "ORDER BY nama_barang"
    Set rs = conn.OpenRecordset(strSql, True)
    If Not rs.EOF Then
        Do While Not rs.EOF
            Debug.Print rs("kode_barang").Value & ", " & rs("nama_barang").Value
            rs.MoveNext
        Loop
    End If
End Sub

6. Insert, Update dan Delete dalam jumlah banyak

Hati-hati jangan langsung mengunakan kode seperti berikut :

Private Sub cmdTest1_Click()
    Dim cmd As cCommand
    Dim i   As Integer

    strSql = "INSERT INTO tabel_test (no_urut) VALUES (?)"

    Set cmd = conn.CreateCommand(strSql)
    For i = 1 To 1000
        cmd.SetInt32 1, i
        cmd.Execute
    Next i
    Set cmd = Nothing
End Sub

hasil uji coba di laptop saya membutuhkan waktu sekitar 1 menitan, tetapi bandingkan jika menggunakan transaction

Private Sub cmdTest2_Click()
    Dim cmd As cCommand
    Dim i   As Integer

    strSql = "INSERT INTO tabel_test (no_urut) VALUES (?)"

    Set cmd = conn.CreateCommand(strSql)
    conn.BeginTrans
    For i = 1 To 1000
        cmd.SetInt32 1, i
        cmd.Execute

        If i Mod 200 = 0 Then
            conn.CommitTrans
            DoEvents

            conn.BeginTrans
        End If
    Next i
    conn.CommitTrans
    Set cmd = Nothing
End Sub

hanya membutuhkan waktu 1 detik, wowww lumayan bedakan.

Oke terakhir untuk mencoba semua kode diatas, library dhSQLite harus sudah direferensikan di project kita.

Selamat mencoba :blush:

Comments