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 objek-objek 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);
}
Jalankan aplikasi anda untuk melihat apakah fungsi pengurutan telah berjalan dengan sempurna.









