Private Sub CmdCari_Click()
dim iI as integer, rs as ADODB.Recordset, sSQL as string
sSQL = "SELECT Kode, Nama, Kecamatan, TanggalExpired, JumlahBukuDipinjam " & _
"FROM TblAnggota WHERE Nama LIKE '%" & ValidStr(txtCari.text) & "%'"
LvAnggota.ListItems.Clear
Set rs = db.Execute(sSQL)
If rs.RecordCount > 0 Then
For iI = 1 to rs.RecordCount
ListViewAdd LvAnggota, GetValidStr(rs(0).value), _
GetValidStr(rs(1).value), _
GetValidStr(rs(2).value), _
GetValidStr(rs(3).value), _
GetValidStr(rs(4).value)
rs.MoveNext
next iI
Else
MsgBox "Data yang Anda cari tidak ada!", vbInformation + vbOkOnly, "Maaf"
End If
rs.close
Set rs = Nothing
End Sub
Hehehe, masalahnya di mana nieh?
Nggak ada masalah sih sebenarnya. Cuman dulu aku *nggak mikir* aja, klo data yg di load kemungkinan jumlahnya bisa sampe RIBUAN pada suatu saat. RATUSAN RIBU, malah... ~ maklum pemula. Masih pendek akal pikirannya, xixixi...
Pandanganku kini beda. Aku cenderung lebih menilai dari sudut pandang fungsionalitas. Kalo seseorang ingin menampilkan data, yang dia butuhkan sebenarnya ada 2 :
- statistik
- data spesifik untuk sesuatu yg emang ingin dia cari
Untuk kedua aspek itu, amat sangat USELESS klo kita tampilin seluruh data yang ada di dalam tabel kita ke dalam grid/listview. Percuma. buat apa?? Setelah dia dapet 10ribu record, misalnya -- trus apa lg yg dia lakukan? memilih data tho? record mana yg kira2 dia butuhkan. ato mungkin informasi yg dia butuhkan hanya sekedar sebuah pertanyaan simpel : "ada berapa sih jumlah anggota perpustakaan ku ini?"
Jadi yg bs kusimpulkan adalah begini, *alangkah lebih baik* klo dalam form aplikasi grid-based (informative-oriented), disediakan fitur2 berikut ini :
1. sediain informasi jumlah record yg ditampilkan dan jumlah record yg ditemukan;
misal :
ditampilkan 100 data dari 138927 yang ditemukan
2. bikin sistem paging. pake tombol <<> ato next >> utk menavigasi ke sekian record selanjutnya. misal kmu sepakat hanya nampilin 100 record per halaman, brarti ketika ditekan next >>, grid akan menampilkan record ke 101 sampe 200.
3. sediakan fitur sort berdasarkan kolom. Misal kolom yg ditampilkan ada 5 :
Kode, Nama, Kecamatan, TanggalExpired, JumlahBukuDipinjam
pastikan user bisa melakukan sorting data yg ditemukan berdasarkan kolom tertentu. entah sort berdasarkan kecamatannya keq, ato berdasarkan jumlah buku keq, ato sort default berdasarkan kode, ato.. what-ever lah sesukamu... (sesuka user jg maksutnya)
4. sediakan fitur refresh! ini penting bangedd. jangan sampe utk melihat data baru user musti tutup form n buka lagi. ato user musti masukin keyword pencarian lagi.
5. sediain fitur custom filter. Misal kmu awalnya (scr default) hanya nyediain pencarian berdasarkan nama, kmu bs juga nambah fitur pencarian custom berdasarkan kecamatan, rentang tanggal expired, jumlah buku yg dipinjam, ato filter-filter lain yg ada di struktur tabel anggota mu dalam database.
6. jangan sekali2 pake select * klo cuman mo nampilin 5 column, kecuali kmu mo sediain grid yg bs meng-customizing kolom2 apa yg mo ditampilkan (...although this is not a good idea...)
7. optimasi query mu. seandainya query SELECT mu menjaring beberapa tabel, coba2 bandingin teknik JOIN yg kmu pake dengan teknik2 lainnya. Utk data kecil or belum lengkap, mungkin nggak ngefek... tapi setelah 1000-record lebih, performance-gap bisa jadi udah makin keliatan...
8. klo perlu, ketika sebelum ngeload hasil recordset ke grid, ubah mousepointer ke cursor BUSY :
screen.mousepointer = vbHourglass
dan klo udah selesei ngeload semuanya, balikin ke cursor default :
screen.mousepointer = vbDefault
*ini punya efek psikologi yg ngga bisa dipandang remeh loo...
9. jangan lupa dispose object recordset klo udah slesei mindahin semua data ke grid. jangan cuman di close doank.
rs.close
set rs = nothing
*hal ini akan menjamin ngga ada lagi cache hasil query yg nyangkut di memory.. seandainya kmu ngeload 100 record, n masing2 record punya ukuran rata2 10KB (misalnya), maka cache query yg nyangkut di memory adalah 1000KB alias 1MB kurang lebih. hmm, klo 100 kali kmu lakukan pencarian data, ato 100 kali refresh lah, program-mu bisa mengonsumsi memory sebanyak game Age of Empires III : The Asian Dynasty nghabisin memory...
10. jangan sungkan2 untuk konsultasikan kepada client/end-user tentang format kolom2 mana aja yg mau ditampilin dalam aplikasi. hal2 yg paling sering dipermasalahkan sama client adalah "mereka ngga bisa melihat informasi yg mereka butuhkan dalam aplikasi yg mereka jalankan". Klo perlu, biarkan mreka yg duluan milih kolom2 mana yg mo ditampilkan. stlh itu baru kita construct. Klo ngga gtu, komplain di kemudian hari, kita ndiri yg akhirnya harus sesuaikan. *huff...
Begitulah...
maaf buat kalian yg mengira postingan ku ini PURE technical. Aku lagi pengen nyampei-in unex-unex ku ajahh... secara technical (baca : code), yaa... ntar2 aja lah dibahas (klo ada yg nanya maksutnya. hihihi)...
bye..