Membuat Query Pencarian dan Pengurutan Data Posted on January 25, 2012 Pembahasan ini merupakan kelanjutan dari pembahasan sebelumnya yaitu Membuat Aplikasi Pengolahan Database. Pada pembahasan kali ini kita akan mempelajari bagaimana mencari dan mengurutkan data dengan melakukan query terhadap tabel dengan format aplikasi MFC. Untuk pencarian data, langkah pertama yang perlu kita lakukan adalah membuat kotak dialog baru dengan tampilan seperti berikut.
Gambar 1. Kotak dialog pencarian data
Buatlah kotak dialog seperti tampilan gambar 1 dengan menggunakan objek-objek kontrol yang terdapat pada toolbox. Ubah properties semua edit box menjadi disable. Untuk dapat menggunakan kotak dialog tersebut, langkah pertama yang harus kita lakukan adalam membuat class. Caranya right-click pada kotak dialog tersebut kemudian pilih Add Class. Beri nama class tersebut misalnya CPencarian.
Gambar 2. Membuat class untuk kotak dialog pencarian Setelah membuat class, langkah selanjutnya adalah membuat variabel untuk objekobjek yang terdapat pada class baru tersebut. Untuk semua edit box buat variabel CString misalnya dengan nama edit_cari_judul, edit_stok_min dan edit_stok_maks. Untuk radio button, buat variabel hanya untuk radio button1. Sebelumnya ubah properties group dari radio button tersebut menjadi true. Buat variabel integer misalnya dengan nama radio_cari. Terakhir buat variabel global bertipe integer misalnya dengan nama tombol_cari untuk menampung pilihan tombol mana yang anda tekan apakah tombol search atau cancel.
Gambar 3. Membuat variabel kotak dialog Fungsi pertama yang akan kita buat adalah untuk menampilkan kotak dialog pencarian. Buat sub menu baru pada menu record misalnya dengan nama search record. Buat fungsi pada menu tersebut dan letakkan pada class view, kemudian isikan kode program seperti berikut: void CLat_DatabaseView::OnRecordSearchrecord() { //membuat objek untuk mengakses kotak dialog pencarian CPencarian pencarian; //menampilkan kotak dialog pencarian pencarian.DoModal(); }
Perhatikan bahwa pada fungsi tersebut kita mengakses class CPencarian. Untuk dapat mengakses class tersebut sebelumnya anda harus menambahkan #include “Pencarian.h” pada bagian atas dari file view.cpp. Jalankan aplikasi untuk melihat apakah kotak dialog pencarian sudah terhubung dengan fungsi dari sub menu pencarian. Selanjutnya kita buat fungsi untuk radio
button. Double-click radio button 1 untuk membuat fungsi dan isikan kode program berikut: void CPencarian::OnBnClickedRadio1() { //mengupdate kondisi kotak dialog ke dalam variabel UpdateData(true); switch(radio_cari) { //nilai radio_cari=0 apabila radio button pertama dipilih //mengaktifkan pencarian berdasarkan judul case 0: GetDlgItem(IDC_EDIT1)->EnableWindow(true); GetDlgItem(IDC_EDIT1)->SetFocus(); GetDlgItem(IDC_EDIT2)->EnableWindow(false); GetDlgItem(IDC_EDIT3)->EnableWindow(false); break; //nilai radio_cari=1 apabila radio button pertama dipilih //mengaktifkan pencarian berdasarkan jumlah stok case 1: GetDlgItem(IDC_EDIT1)->EnableWindow(false); GetDlgItem(IDC_EDIT2)->EnableWindow(true); GetDlgItem(IDC_EDIT2)->SetFocus(); GetDlgItem(IDC_EDIT3)->EnableWindow(true); break; } }
Untuk radio button 2 isi dengan nama fungsi dari radio button 1. void CPencarian::OnBnClickedRadio2() { OnBnClickedRadio1(); }
Jalankan aplikasi anda untuk melihat apakah fungsi radio button berjalan dengan baik. Agar tidak ada radio button yang terpilih pada saat kotak dialog pencarian muncul, inisialisasi variabel radio_cari dengan nilai -1 pada fungsi OnInitDialog(). Untuk membuat fungsi OnInitDialog, buka properties dari class CPencarian kemudian pilih menu overrides lalu tambahkan fungsi OnInitDialog().
Gambar 4. Membuat fungsi OnInitDialog() BOOL CPencarian::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here radio_cari=-1; UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
Selanjutnya buat fungsi OnClose() pada class CPencarian dengan cara mengakses properties kemudian pilih messages, pilih event WM_CLOSE kemudian add OnClose().
Gambar 5. Membuat fungsi OnClose() Isikan kode program berikut pada fungsi OnCLose(). void CPencarian::OnClose() { //mengisikan variabel tombolcari = 1 ketika kotak dialog di tutup tombolcari=1; CDialog::OnClose(); }
Buat juga fungsi untuk tombol search kemudian isi dengan perintah OnOK() untuk menutup kotak dialog. Untuk tombol Cancel buat fungsi dan isikan dengan fungsi OnClose() dan OnOK() agar ketika tombol cancel ditekan maka fungsi OnClose() akan dijalankan dan kotak dialog ditutup. //fungsi tombol search void CPencarian::OnBnClickedButton1() { OnOK(); } //fungsi tombol cancel void CPencarian::OnBnClickedButton2() { OnClose(); OnOK(); }
Pada kotak dialog utama tambahkan tombol refresh untuk merefresh kembali data awal. Ubah properties visible pada tombol tersebut menjadi false agar pada saat awal tombol tersebut tidak terlihat. Buat variabel control untuk tombol tersebut misalnya dengan nama ctrl_btn_refresh.
Gambar 6. Membuat tombol refresh Tambahkan kode program berikut pada fungsi search record: void CLat_DatabaseView::OnRecordSearchrecord() { //membuat objek untuk mengakses kotak dialog pencarian CPencarian pencarian; //menampilkan kotak dialog pencarian pencarian.DoModal(); //mengupdate data dari kotak dialog ke variabel UpdateData(true); //buat variabel filter untuk menampung query filter CString filter; if(pencarian.radio_cari==0) { //membuat variabel filter untuk menampung query pencarian filter = _T("judul_buku LIKE '%"); filter.Append(pencarian.edit_cari_judul); filter.Append(L"%'"); } else {
//membuat variabel filter untuk menampung query pencarian //CString filter = _T("stok BETWEEN 10 AND 15"); filter = _T("stok BETWEEN "); filter.Append(pencarian.edit_stok_min); filter.Append(L" AND "); filter.Append(pencarian.edit_stok_maks); } //query pencarian data m_pSet->m_strFilter = filter; //menutup dan membuka dataset agar hanya menampilkan hasil pencarian m_pSet->Close(); m_pSet->Open(); UpdateData(false); //Menampilkan tombol refresh ctrl_btn_refresh.ShowWindow(true); if (pencarian.tombolcari==1) ctrl_btn_refresh.ShowWindow(false); }
Buat fungsi pada tombol refresh dan isikan kode program seperti berikut: void CLat_DatabaseView::OnBnClickedButton3() { //filter dengan atribut ID dan tanpa kondisi m_pSet->Close(); m_pSet->m_strFilter = "[ID]"; m_pSet->Open(); UpdateData(false); //Menghilangkan tombol refresh ctrl_btn_refresh.ShowWindow(false); }
Jalankan aplikasi untuk melihat apakah fungsi pencarian yang kita buat telah berjalan dengan baik. Selanjutnya untuk mengurutkan data buat kotak dialog baru dan buat class baru untuk kotak dialog tersebut misalnya dengan nama CPengurutan.
Gambar 7. Membuat kotak dialog Pengurutan Data Buatlah tampilan kotak dialog tersebut seperti pada gambar 7 dengan menggunakan objek-objek kontrol yang terdapat pada toolbox. Masukkan header class CPengurutan yaitu pengurutan.h ke bagian atas dari file view.cpp agar class CPengurutan dapat diakses oleh class view.
Gambar 8. File header pada file view.cpp Buat sub menu baru pada menu record misalnya sort record, kemudian buat fungsi pada sub menu tersebut, lalu isikan dengan kode program seperti berikut: void CLat_DatabaseView::OnRecordSortrecord() { //membuat objek untuk mengakses kotak dialog pengurutan CPengurutan pengurutan; //menampilkan kotak dialog pencarian pengurutan.DoModal(); }
Ubah properties group untuk radio button 1 menjadi true. Selanjutnya buat variabel pada radio button 1 saja dengan tipe integer, misalnya dengan nama radio_urut. Buat fungsi OnInitDialog() pada class CPengurutan kemudian isikan kode program seperti berikut: BOOL CPengurutan::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here radio_urut=-1; UpdateData(false); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
Perhatikan bahwa kode program tersebut menginisialisasi variabel radio_urut dengan nilai -1 agar tidak ada radio button yang terpilih pada saat awal kotak dialog dijalankan.
Gambar 9. Membuat variabel pada radio button Buat fungsi untuk tombol sort dan tombol cancel. Isikan fungsi OnOK() pada kedua fungsi tersebut aga kotak dialog pengurutan ditutup ketika kedua tombol tersebut ditekan. Terakhir lengkapi fungsi sort record pada file view.cpp dengan kode program seperti berikut: void CLat_DatabaseView::OnRecordSortrecord() { //membuat objek untuk mengakses kotak dialog pengurutan CPengurutan pengurutan; //menampilkan kotak dialog pencarian pengurutan.DoModal();
UpdateData(true); switch(pengurutan.radio_urut) { case 0: m_pSet->Close(); m_pSet->m_strSort="[ID]"; m_pSet->Open(); break; case 1: m_pSet->Close(); m_pSet->m_strSort="[judul_buku]"; m_pSet->Open(); break; } UpdateData(false); }