Skip to main content

Fungsi Untuk Membuat Kriteria SQL di VBA Access

Seperti diketahui, penulisan kriteria pada SQL di VBA mengikuti aturan main tertentu yang sesuai dengan SQL pada Access. Kriteria pada SQL digunakan untuk memerintahkan SQL (umumnya di server database) supaya menampilkan data sesuai dengan keinginan pengguna.

Berbagai macam kriteria untuk memfilter data yang ingin ditampilkan dengan menggunakan query
Selain menampilkan data sesuai keinginan pengguna, pemakaian kriteria juga dapat meringankan beban server database. Dengan menggunakan kriteria, server database dapat menampilkan data seperlunya saja. Bayangkan saja jika sebuah tabel Curriculum Vitae terdiri dari field Id, nama orang, tanggal lahir, dan seterusnya. Pada situasi tertentu, kita hanya ingin mengetahui nama orang yang terlahir di bulan Juli, maka kita tidak perlu menampilkan seluruh record yang jumlahnya mungkin ribuan. Kita hanya perlu menggunakan kriteria tertentu untuk menyaring data kelahiran di bulan Juli.

Bila selama ini kita terbiasa menuliskan kriteria untuk SQL secara statis di VBA, kali ini kita akan menuliskan fungsi untuk membuat kriteria SQL secara dinamis. Fungsi ini nantinya bisa diaplikasikan ke berbagai macam SQL. Untuk diketahui, fungsi ini merupakan bagian kecil dari keseluruhan fungsi yang akan diposting di waktu yang akan datang, bisa diaplikasikan pada berbagai macam form, salah satunya seperti terlihat pada gambar di atas.

Fungsi berikut ini dapat digunakan untuk menuliskan kriteria yang dinyatakan dalam bentuk SQL.
'Pernyataan Enum enumOperator ini harus ditaruh dibagian deklarasi modul (di bagian paling atas dari modul)
Public Enum enumOperator
  oprEqual = 0
  oprNotEqual = 1
  oprMoreThan = 2
  oprMoreOrEqualThan = 3
  oprLessThan = 4
  oprLessOrEqualThan = 5
  oprBetween = 6
  oprNotBetween = 7
  oprIn = 8
  oprNotIn = 9
End Enum
Function membuatKriteriaString(strNamaField As String, _
                                strNamaSumber As String, _
                                varNilaiField1 As Variant, _
                                Optional varNilaiField2 As Variant = "", _
                                Optional intSimbolOperator As enumOperator = 0 _
                                ) As String
  Dim strKriteria As String, strOpr As String
  Dim strNilaiKonversi1, strNilaiKonversi2 As String
On Error GoTo Err_Msg
  strNilaiKonversi1 = konversiNilaiField(strNamaField, strNamaSumber, varNilaiField1)
  strNilaiKonversi2 = konversiNilaiField(strNamaField, strNamaSumber, varNilaiField2)
  Select Case intSimbolOperator
    Case oprEqual: strOpr = " = " & strNilaiKonversi1
    Case oprNotEqual: strOpr = " <> " & strNilaiKonversi1
    Case oprMoreThan: strOpr = " > " & strNilaiKonversi1
    Case oprMoreOrEqualThan: strOpr = " >= " & strNilaiKonversi1
    Case oprLessThan: strOpr = " < " & strNilaiKonversi1
    Case oprLessOrEqualThan: strOpr = " <= " & strNilaiKonversi1
    Case oprBetween: strOpr = " BETWEEN " & strNilaiKonversi1 & " AND " & strNilaiKonversi2
    Case oprNotBetween: strOpr = " NOT BETWEEN " & strNilaiKonversi1 & " AND " & strNilaiKonversi2
    Case oprIn: strOpr = " IN " & "(" & strNilaiKonversi1 & ")"
    Case oprNotIn: strOpr = " NOT IN " & "(" & strNilaiKonversi1 & ")"
    Case Else:  strOpr = " = " & strNilaiKonversi1
  End Select
  strKriteria = strNamaField & strOpr
  membuatKriteriaString = strKriteria
Exit_Function:
  Exit Function
Err_Msg:
  MsgBox "Function membuatKriteriaString, Error # " & str(Err.Number) & ", source: " & Err.Source & _
  Chr(13) & Err.Description
  Resume Exit_Function
End Function
Untuk menjalankan fungsi di atas, maka ada beberapa fungsi yang sudah harus tersedia di modul Access. Fungsi itu adalah:
membukaDbs, yang digunakan untuk memastikan bahwa database sudah dalam posisi untuk dibuka dan diolah.
konversiNilaiField, yang digunakan untuk mengkonversi nilai field.
Ada tiga parameter yang wajib diisi dan dua yang sifatnya opsional:
  1. strNamaField, merupakan nama field dalam sebuah tabel, sifatnya wajib
  2. strNamaSumber, merupakan nama tabel dari strNamaField, sifatnya wajib
  3. varNilaiField1, merupakan nilai data dari strNamaField pertama, sifatnya wajib
  4. varNilaiField2, merupakan nilai data dari strNamaField kedua, sifatnya opsional
  5. intSimbolOperator, merupakan operator string, sifatnya opsional, dengan nilai default 0
Penulisan dilakukan di antara tanda kutip dua (" "). Misalnya seperti eksekusi di Immediate Window ini:
Membuat kriteria pada field dengan tipe data Number
? membuatKriteriaString("Induk","tblMenus","1",,oprMoreThan)
Induk > 1
? membuatKriteriaString("Induk","tblMenus","1","3",oprBetween)
Induk BETWEEN 1 AND 3
Membuat kriteria pada field dengan tipe data Text
? membuatKriteriaString("KodeRek","tblRekUtama","111",,oprNotEqual)
KodeRek <> '111'
? membuatKriteriaString("KodeRek","tblRekUtama","111,112,116",,oprIn)
KodeRek IN ('111','112','116')
? membuatKriteriaString("KodeRek","tblRekUtama","111,112,116",,oprNotIn)
KodeRek NOT IN ('111','112','116')
Dengan menggunakan fungsi membuatKriteriaString, nantinya, kita bisa membuat query yang kriterianya bisa kita atur secara dinamis, seperti terlihat di gambar di awal posting ini.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access