Beberapa hari yang lalu seperti biasa iseng-iseng browsing untuk pengantar tidur, coba mengunjungi alexa.com dan saya ingin melihat perkembangan blog saya, nah saya dapati di keywords ada tulisan "menghilangkan duplikat pada listbox", pasti anak kuliahan ni he3... nggak pernah di ajarin sama dosennya ya?
Pada artikel ini saya bahas menghilangkan duplikasi pada listbox dengan menggunakan if dan looping atau dengan cara lain yaitu menggunakan SELECT DISTINCT
Sebagai contoh saya pakai data di bawah ini :
Hilangkan Duplikasi dengan Fungsi IF dan LOOPING
Sebenarnya secara logika menghilangkan duplikasi pada listbox dan yang semacamnya dapat dilakukan dengan fungsi IF, apabila nilai tertentu sudah pernah di add ke listbox, maka nilai tersebut tidak di add lagi ke listbox.Code programnya menggunakan dua buah fungsi looping (perulangan), lebih tepatnya looping di dalam looping.
looping pertama adalah untuk membaca data (dari database) yang akan di add ke listBox. Didalamnya terdapat looping lagi, yaitu looping untuk membaca list/data pada ListBox yang nantinya digunakan untuk menyamakan dengan data yang dibaca dari database, apabila ternyata antara nilai tertentu dari database sama dengan (=) list/text yang ada pada ListBox maka nilai tertentu tersebut tidak di add lagi ke listBox . Berarti untuk setiap data/record dari database yang dibaca harus melakukan perulangan sebanyak list yang terdapat dalam sebuah ListBox.
Code untuk logika diatas adalah sebagi berikut :
Sub addlistif()
On Error Resume Next
Data1.DatabaseName = App.Path & "\db1.mdb" 'koneksi ke database
Data1.RecordsetType = 1
Data1.RecordSource = "select * from table1" ' Membuka tabel1 dari sebuah database
Data1.Refresh
With List1
.Clear 'mengosongkan listBox
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF ' permulaan perulangan membaca data dari database
n = 0
If Not List1.ListCount = 0 Then
List1.ListIndex = -1
For i = 0 To List1.ListCount - 1 ' perulangan membaca data dari listBox
List1.ListIndex = List1.ListIndex + 1
If Data1.Recordset("nama") = List1.Text Then 'jika data sama
n = 1
Exit For
End If
Next i
Else 'jika listbox dalam kondisi kosong
n = 0
End If
If n = 0 Then .AddItem Data1.Recordset("nama")
Data1.Recordset.MoveNext
Loop
End With
End Sub
Untuk data yang sedikit tidaklah menjadi suatu masalah jika menggunakan code diatas untuk menghilangkan duplikasi pada saat mengisi listBox, tetapi apabila data yang ada sudah ribuan akan sangat lama untuk mengisi listBox tersebut, karena untuk setiap record harus dilakukan perulangan sebanyak data yang sudah dimasukkan ke dalam listbox.
Hilangkan Duplikasi Dengan SELECT DISTINCT
Apakah SELECT DISTINCT itu? apabila diterjemahkan distinct itu berarti "berbeda", dapat kita pahami bahwa select distinct adalah menampilkan record-record dari sebuah tabel yang memiliki nilai berbeda untuk field tertentu. Dalam sebuah literatur disebutkan bahwa :
The SELECT keyword allows us to grab all information from a column (or columns) on a table. This, of course, necessarily mean that there will be redundancies. What if we only want to select each DISTINCT element? This is easy to accomplish in SQL. All we need to do is to add DISTINCT after SELECT. http://www.1keydata.com/sql/sqldistinct.htmlUntuk aturan penulisan syntaxnya adalah sebagai berikut :
"SELECT DISTINCT(nama_kolom) FROM nama_table"
Sehingga codenya adalah sebagai berikut :
Sub addlistdistinct()Bagaimana?lebih simpel bukan?kita hanya perlu mengubah recordsource data dengan syntax SQL, syntax tersebut yang akan menyeleksi record mana yang berbeda untuk ditampilkan sehingga looping hanya dilakukan sebanyak record yang telah diseleksi sebelumnya. Dibandingkan dengan menggunakan fungsi if seperti diatas jelas syntax SQL DISTINCT ini jauh lebih cepat. Hayo pilih yang mana?
Data1.DatabaseName = App.Path & "\db1.mdb" 'koneksi ke database Data1.RecordsetType = 1
Data1.RecordSource = "SELECT DISTINCT(nama) FROM table1" Data1.Refresh
With List1
.Clear
Data1.Recordset.MoveFirst
Do Until Data1.Recordset.EOF
.AddItem Data1.Recordset("nama")
Data1.Recordset.MoveNext
Loop
End With
End Sub
Update Contact :
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email : Fajarudinsidik@gmail.com
No Wa/Telepon (puat) : 085267792168
No Wa/Telepon (fajar) : 085369237896
Email: Fajarudinsidik@gmail.com
atau Kirimkan Private messanger melalui email dengan klik tombol order dibawah ini :