Menampilkan Record dengan Menggunakan Query di Access VBA. Perintah atau pernyataan SQL yang paling mendasar dan sering digunakan di Access adalah peryataan SELECT. Dengan SELECT, kita bisa menampilkan record yang diperoleh melalui query. Record yang ditampilkan dapat berasal dari satu buah tabel atau lebih, atau berasal dari query lainnya. Record yang ditampilkan juga bisa terdiri dari satu atau lebih field, tergantung kebutuhan.
Syntax pernyataan SELECT pada SQL di Access VBA adalah sebagai berikut:
Bila ingin menampilkan seluruh field yang ada dalam sebuah tabel, maka kita dapat menggunakan wildcard berupa tanda asterik (*):
Pada posting berikut ini, ada beberapa contoh penggunaan SELECT query yang langsung diaplikasikan ke dalam form frmRekUtama, di mana kita akan mengubah isi properti Record Source dari form itu. Untuk itu, lakukan langkah-langkah berikut ini.
Untuk memahami wildcard di atas, maka kita dapat mengaplikasikan dengan contoh. Isikan record source berikut ini:
Syntax pernyataan SELECT pada SQL di Access VBA adalah sebagai berikut:
SELECT [nama field1] , [nama field2], [nama field3], ... FROM [nama tabel]Di mana SELECT merupakan pernyataan SQL untuk memilih. Berikutnya, [nama field1], [nama field2], dan seterusnya adalah nama field yang ingin ditampilkan, FROM adalah klausa yang diperlukan oleh SELECT untuk mengambil data dari tabel. Tanda kurung siku ([...]) pada [nama field1] dan [nama field2] digunakan untuk menyatukan nama field yang terdiri dari dua atu lebih kata dan terpisah oleh spasi. Jika dua atau lebih kata yang membentuk nama field itu disambung, maka tanda kurung siku tidak harus digunakan. Contohnya:
- Nama field Nomor KTP akan ditulis menjadi [Nomor KTP] pada SQL
- Nama field NomorKTP bisa ditulis [NomorKTP] atau NomorKTP
- Nama field Nomor_KTP bisa ditulis [Nomor_KTP] atau Nomor_KTP
Bila ingin menampilkan seluruh field yang ada dalam sebuah tabel, maka kita dapat menggunakan wildcard berupa tanda asterik (*):
SELECT * FROM [nama tabel]Sebagai uji coba, kita dapat menggunakan tabel tblRekUtama seperti dijelaskan pada posting dengan judul:
- Membuat Tabel Induk Rekening Utama (untuk nama field dan propertinya)
- Memasukkan Data ke Tabel Menggunakan Form Record Source (untuk isi datanya), dan
- Membuat Form Menggunakan Form Wizard (untuk form-nya).
Pada posting berikut ini, ada beberapa contoh penggunaan SELECT query yang langsung diaplikasikan ke dalam form frmRekUtama, di mana kita akan mengubah isi properti Record Source dari form itu. Untuk itu, lakukan langkah-langkah berikut ini.
- Buka form frmRekUtama dalam format Design View.
- Sisipkan tombol perintah dengan memilih Design tab > Forms Tools. Properti tombol itu adalah sbb:
- Name=cmbReload
- Caption=Reload Data
- On Click=[Event Procedure], isikan dengan kode VBA berikut ini:
Private Sub cmbReload_Click() Me.RecordSource = "SELECT KodeRek, NamaRek, Grup FROM tblRekUtama" Me.Requery End Sub
Gambar 1 Tombol Reload Data - Buka form frmRekUtama dalam format Form View dan tekanlah tombol Reload Data untuk melihat hasilnya. Dengan Me.RecordSource seperti di atas, maka data yang ditampilkan tidak berubah karena semua field yang ada di tabel tblRekUtama diikutsertakan di dalam query. Demikian pula bila kita ganti dengan reord source sbb:
Me.RecordSource = "SELECT * FROM tblRekUtama"
Setelah kita menekan tombol Reload Data, hasilnya akan sama saja, tidak ada perubahan. Tanda '*' di atas mewakili semua field yang ada di dalam tabel tblRekutama.
- Pada kode VBA berikut ini, saat kita menekan tombol Reload Data, isi data di frmRekUtama berubah urutannya. Data yang pada awalnya ditampilkan dengan urutan NoRek, kemudian berubah dengan urutan berdasarkan NamaRek yang meningkat (ASC=Ascending). Pernyataan "ORDER BY NamaRek ASC"-lah yang mengarahkan Access SQL untuk menampilkan data dengan urutan berdasarkan NamaRek yang meningkat itu.
Me.RecordSource = "SELECT * FROM tblRekUtama ORDER BY NamaRek ASC"
- Bila urutannya menurun, kita hanya perlu mengganti ASC menjadi DESC (DESC=Descending), dengan demikian, Me.RecordSource akan menjadi
Me.RecordSource = "SELECT * FROM tblRekUtama ORDER BY NamaRek DESC"
- Pernyataan ORDER BY, selain diikuti dengan nama field, juga bisa diikuti nomor urut penempatan field dalam query, seperti berikut ini:
Me.RecordSource = "SELECT KodeRek, NamaRek, Grup FROM tblRekUtama ORDER BY 2"
Query di atas akan menampilkan seluruh record dengan field KodeRek, NamaRek, dan Grup dan diurutkan berdasarkan field NamaRek (secara default arahnya meningkat). Dalam pernyataan SQL di atas, NamaRek ditempatkan di urutan kedua. - Kita bisa menampilkan field tertentu sesuai dengan keinginan. Misalnya:
Me.RecordSource = "SELECT NamaRek FROM tblRekUtama"
Query di atas hanya menampilkan field NamaRek yang ada di tabel tblRekUtama. - Query di bawah ini menampilkan 5 record pertama yang ada di tabel tblRekUtama tanpa diurutkan.
Me.RecordSource = "SELECT TOP 5 * FROM tblRekUtama"
Secara default, pemilihan 5 record pertama dilakukan berdasarkan urutan penempatan field dalam query. Dalam hal ini, urutan penempatan field adalah sebagai berikut: KodeRek, NamaRek, dan Grup. Bila urutan penempatan field berubah, misalnya menjadi Grup, KodeRek, dan NamaRek, maka 5 record pertama akan ditampilkan sesuai dengan field Grup. - Query di bawah ini menampilkan 5 record pertama yang ada di tabel tblRekUtama yang telah diurutkan berdasarkan field KodeRek. Field KodeRek juga ditempatkan di posisi pertama.
Me.RecordSource = "SELECT TOP 5 tblRekUtama.*, * FROM tblRekUtama ORDER BY KodeRek"
- Query di bawah ini menampilkan 5 record pertama yang ada di tabel tblRekUtama yang telah diurutkan berdasarkan field Grup.
Me.RecordSource = "SELECT TOP 5 Grup, KodeRek, NamaRek, * FROM tblRekUtama"
- Query di bawah ini menampilkan semua field yang ada di tabel tblRekUtama yang telah diurutkan berdasarkan field KodeRek, di mana hanya record dengan Grup='1' atau Aktiva saja yang ditampilkan. Tanda petik tunggal ('...') digunakan untuk menyatakan bahwa tipe data Grup adalah Text/String. Jadi, kita harus memperhatikan tipe data dari field yang akan menjadi kriteria.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE Grup='1' ORDER BY KodeRek"
- Query di bawah ini menampilkan data pada semua field yang ada di tabel tblRekUtama dan diurutkan berdasarkan field KodeRek, di mana hanya record dengan Grup sama dengan control yang bernama Grup (berupa combo box) di frmRekUtama yang terbuka saja yang ditampilkan.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE Grup='" & Me!Grup & "' ORDER BY KodeRek"
Pernyataan WHERE seperti di atas membantu kita untuk secara lebih spesifik menampilkan record sesuai dengan kriteria yang diinginkan. Kriteria itu dinyatakan setelah pernyataan WHERE seperti pada contoh di atas. - Bila tipe data dari nilai pada kriteria yang kita inginkan berupa angka (integer, single, double, dsb), maka tanda petik tunggal seperti di atas tidak diperlukan. Sedangkan bila kriteria yang kita inginkan berupa tanggal, maka tanda petik tunggal diganti dengan tanda pagar (#...#). Contohnya seperti ini (catatan: tidak menggunakan tblRekUtama):
Me.RecordSource = "SELECT * FROM tblTempTransJournal_Parent WHERE TglTransaksi=#" & Me!TglTransaksi & "# ORDER BY TipeJurnal"
Query di atas akan menampilkan data pada semua field yang ada di tblTempTransJournal_Parent di mana tglTransaksi dari record yang ingin ditampilkan sama dengan control yang bernama TglTransaksi dan diurutkan berdasarkan field TipeJurnal yang meningkat. - Query berikut ini akan menampilkan semua field yang ada di tblRekUtama di mana dua karakter pertama di sisi kiri pada data yang ada di field NamarRek sama dengan 'ba' (contoh: Bank, Bangunan, dsb).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE LEFT(NamaRek,2)='ba' ORDER BY KodeRek"
Menggunakan wildcard pada kriteria untuk menampilkan record dengan SQL di Access VBA
Di bagian atas telah disinggung wildcard yang berupa tanda asterik (*) yang digunakan untuk menampilkan semua field dalam sebuah query. Pada bagian ini, kita akan menggunakan wildcard yang digunakan sebagai kriteria untuk menampilkan record dalam query.Karakter wildcard | Keterangan |
* | Kosong atau karakter apa saja |
? | Satu karakter apa pun bentuknya |
# | Satu angka (0-9) |
[daftar] | Satu karakter apa pun dalam daftar |
[!daftar] | Satu karakter apa pun yang tidak ada dalam daftar |
- Query di bawah ini akan menampilkan record di mana data pada field NamaRek berisi 'nt', di mana pun posisi 'nt', entah itu ada di bagian awal, tengah, atau akhir.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE '*nt*'"
Contoh: kantor, antar, dsb. - Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai akhiran 'nt'.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE '*nt'"
Contoh: payment. - Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai awalan 'bi'.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE 'bi*'"
Contoh: biaya. - Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai awalan 'bi' dan Grup='2' (Grup Hutang). Pernyataan AND merupakan operator logika yang berarti kriteria NamaRek LIKE 'bi*' dan Grup='2', keduanya harus dipenuhi.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE 'bi*' AND Grup='2'"
- Bila hanya salah satu, maka operator logika OR yang digunakan dalam pernyataan SQL di atas, atau sbb:
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE 'bi*' OR Grup='2'"
Dengan operator logika OR, maka salah satu kriteria di atas, baik NamaRek LIKE 'bi*' maupun Grup='2', salah satu bisa dipenuhi. Query di atas akan menampilkan record di mana field NamaRek diawali dengan 'bi' (seperti Biaya) atau field Grup bernilai '2'. - Query di bawah ini akan menampilkan record di mana data pada field KodeRek mempunyai akhiran 1 dengan ## berupa angka (contoh: 101, 201, 111, dst).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE KodeRek LIKE '##1'"
- Query di bawah ini akan menampilkan record di mana data pada field KodeRek mempunyai angka 2 di tengah (contoh: 121, 122, 222, dst).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE KodeRek LIKE '#2#'"
- Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai huruf t diikuti sembarang karakter dan huruf n di mana pun posisi mereka berada (contoh: pendapatan, piutang, tanah, potongan, dsb.).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE '*t?n*'"
- Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai akhiran t diikuti sembarang satu karakter dan huruf n (contoh: ringkasan pendapatan, biaya pengobatan, dsb.).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE '*t?n'"
- Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai awalan p diikuti huruf a, o, atau p (contoh: pajak, potongan, pph, dsb.).
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE 'p[a,o,p]*'"
- Query di bawah ini akan menampilkan record di mana data pada field NamaRek mempunyai awalan p diikuti huruf selain huruf a, o, dan p.
Me.RecordSource = "SELECT * FROM tblRekUtama WHERE NamaRek LIKE 'p[!a,o,p]*'"
mana file nya ?
ReplyDeleteAda di halaman Download File. Baca pwtunjuknya lebih dahulu di situ. Lalu, cari saja item yg judulnya sama dng judul di atas.
DeleteTerima Kasih banyak om...
ReplyDeleteAss Mas,
ReplyDeletesy membuat Query untuk input data, diantaranya ada Field (Saldo Awal, Debet, Kredit dan Saldo Akhir).
maksudnya nanti setiap saya input di New record berikutnya, otomatis Field SAldo Awal terisi dengan Data Saldo Akhir dari record terakhir sebelumnya,
contoh=>
No Tanggal Kode Nama Saldo Awal Debet Kredit Sado Akhir
1 6/1/2020 A001 Adi 100,000 100,000
2 6/5/2020 A001 Adi 100,000 100,000 200,000
3 6/20/2020 A001 Adi (otomatis terisi dg saldo akh sebelumnya)
mhn dibantu Mas,
Ada 2 cara: menggunakan fungsi DSUM debit dikurang DSUM kredit atau membuat tabel yg bisa menghitung dan menyimpan saldo awal setiap kali transaksi dicatat.
ReplyDelete