Mengakses database SQLite menggunakan library dhSQLite
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 :
- cConnection, sesuai namanya kelas ini digunakan untuk membuat koneksi ke database
- cRecordset, digunakan untuk menampung pernyataan select
- 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
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
Comments