Minggu, 25 Agustus 2013

Mengakses database SQLite menggunakan library dhSQLite

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 :
  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 :
1
2
3
4
5
6
7
8
9
10
11
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 :
1
2
3
4
5
6
7
8
9
10
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 :D
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
1
2
3
4
5
6
7
8
9
10
11
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 :)

http://coding4ever.wordpress.com/2010/07/05/mengakses-database-sqlite-menggunakan-library-dhsqlite/

Tidak ada komentar: