Skip to main content

Penggunaan SELECT TOP Untuk Menampilkan Sejumlah Tertentu Record Pada Query di Access

Pada situasi tertentu, pengguna database ingin menampilkan record yang berisi sejumlah tertentu yang merupakan urutan teratas atau urutan terbawah dari sekumpulan record. Di Access, kita bisa menggunakan SELECT TOP yang diikuti dengan urutan tertentu, ke atas (Ascending) atau ke bawah (Descending).
Gambar 1. SELECT TOP 20 menampilkan 20 record yang diurutkan berdasar nomor voucher
Jadi, semisal kita ingin menampilkan 5 siswa dengan nilai terbaik di antara ratusan siswa dalam sebuah tabel, maka kita dapat menuliskan query seperti ini:
SELECT TOP 5 * FROM tblSiswa ORDER BY siswaNilai DESC
Urutan ORDER BY siswaNilai DESC berarti kita menampilkan siswaNilai yang merupakan nilai siswa dari urutan tertinggi ke urutan terendah. Bila kita ingin menampilkan siswa dengan nilai terendah, maka querynya akan menjadi seperti ini.
SELECT TOP 5 * FROM tblSiswa ORDER BY siswaNilai ASC
Di mana siswa akan diurutan dari nilai terendah ke nilai tertinggi.
Bila tidak ada pernyataan ORDER BY, maka query akan ditampilkan sesuai dengan kondisi tabel tblSiswa seperti apa adanya. Dalam hal ini urutannya sesuai dengan urutan fisik dari record yang tersimpan dalam tabel tblSiswa.
Selain penggunaan SELECT TOP dengan nilai absolut di atas, kita juga bisa menggunakan SELECT TOP untuk nilai relatif, yaitu dengan menggunakan pernyataan nilai diikuti PERCENT, seperti berikut ini:
SELECT TOP 5 PERCENT * FROM tblSiswa ORDER BY siswaNilai DESC
Untuk menampilkan 5% record dari 100% record yang ada di tabel tblSiswa dengan nilai teratas. Jadi misalnya dalam tabel tblSiswa ada 200 record, maka  5%-nya akan sama dengan 10 siswa. Dengan
SELECT TOP 5 PERCENT * FROM tblSiswa ORDER BY siswaNilai DESC, maka record yang ditampilkan ada 10 siswa dengan nilai teratas. Bila ada 500 siswa, maka 5% akan sama dengan 25 siswa, demikian dan seterusnya.

Penggunaan SELECT TOP untuk penomoran halaman

Selain digunakan untuk memilih sejumlah tertentu dengan urutan tertentu seperti penjelasan di atas, SELECT TOP banyak digunakan untuk membagi record dalam tabel atau query ke dalam beberapa bagian yang bisa disebut halaman atau pajinasi (bhs Inggrisnya Pagination).

Jadi misalnya begini, kita tahu bahwa jumlah record dalam sebuah tabel bisa lebih dari 2000. Nah, jika menampilkan seluruh record yang ada di tabel, Access membutuhkan waktu yang mungkin lama, sehingga menjadi lambat. Nah, pemisahan record yang besar dengan menggunakan halaman atau pajinasi seperti ini akan membantu Access mempercepat proses untuk menampilkan record.

Jadi misalnya sebuah tabel mempunyai 2000 record, maka kita bisa membaginya menjadi 20 halaman dengan 100 record per halamannya. Dengan demikian, Access tidak membutuhkan waktu lama untuk memproses 100 record. Adapun rumus perhitungan pajinasi adalah sebagai berikut:

jumlah record per halaman = a
total record =  b
nomor halaman ingin ditampilkan= c
jumlah record setelah nomor halaman pada c = d = b - ((c-1) * a)

jadi misalnya ingin menampilkan nomor halaman 1 (c=1) pada nama tabel tblSiswa dengan urutan field siswaNilai ke bawah, maka

a= 100
b= 2000
c= 1
d= 2000 - ((1-1) * 100) = 2000
nama tabel= tblSiswa
urut berdasarkan field= siswaNilai

Querynya adalah sebagai berikut:


SELECT TOP 100  * FROM (SELECT TOP  2000 * FROM tblSiswa ORDER BY siswaNilai DESC)  AS subTblSiswa ORDER BY siswaNilai ASC

Query di atas menampilkan halaman pertama sebanyak 100 record dengan urutan siswaNilai dari atas (tertinggi) ke bawah (terendah).

Lain waktu, misalnya ingin menampilkan nomor halaman 2 (c=2) pada nama tabel tblSiswa dengan urutan field siswaNilai ke bawah, maka

a= 100
b= 2000
c= 2
d= 2000 - ((2-1) * 100) = 1900
nama tabel= tblSiswa
urut berdasarkan field= siswaNilai

Querynya adalah sebagai berikut:

SELECT TOP 100  * FROM (SELECT TOP  1900 * FROM tblSiswa ORDER BY siswaNilai DESC)  AS subTblSiswa ORDER BY siswaNilai ASC.

Query di atas menampilkan halaman kedua sebanyak 100 record dengan urutan siswaNilai dari atas (tertinggi) ke bawah (terendah).

Secara penulisan query, pajinasi seperti di atas terlihat sederhana. Dalam pelaksanaannya, pajinasi biasanya dibuat dalam sebuah form yang sifatnya sangat dinamis karena ada interaksi antara pengguna dengan data di sebuah tabel. Jadi pajinasi dalam sebuah form akan dibahas lebih rinci lain waktu.
Gambar 2. SELECT TOP 20 menampilkan 20 record yang diurutkan berdasar nomor voucher, berada di halaman 29. Selain itu ada juga halaman 26 sampai dengan 41
Contoh pajinasi yang lengkap ada di Gambar 1 paling atas. Sedangkan Gambar 2 di atas adalah pembagian record menjadi banyak halaman, dengan nomor 29 adalah halaman yang aktif. Dari situ kita juga bisa memilih halaman lain, semisal 26, 31, 34, atau 40.

Comments

  1. Dear mas Yanto ... udah saya coba mengimplementasikan gambar 4 namun selalu gagal..
    pengen dong implementasi dari gambar 4 .. thanks Mas.

    ReplyDelete
  2. maaf gambar 2 maksud saya .. hehehe

    ReplyDelete
    Replies
    1. Tolong dijelaskan lebih detail, kendalanya di mana?

      Delete
  3. thanks mas ...udah ketemu caranya .. ternyata permainan antara ASC dan DESC saja ...sekali lagi terima kasih atas inspirasi yang diberikan di blog ini ..

    ReplyDelete
  4. satu pertanyaan mas,
    untuk ComboBox paling bawah gambar2 (Pages) bagaimana untuk mendapat nilai sesuai halaman yang ada?

    semantara ini sebagai rowsource nya saya buat table temporary yang kudu di Delete/Append (karena WHERE nya rada banyak) terlebih dahulu melalui Private module serta function delete dan fucntion Append

    adakah cara lain mas? yang lebih simple?

    Thanks & regards

    ReplyDelete
    Replies
    1. Row Source Type= Value List
      Row Source= Isikan angka integer.

      Angka Intger diperoleh dng membagi Jumlah Total Record dng Jumlah Record per Halaman atau b/a.

      Setelah itu, menggunakan fungsi for i=1 to b/a next, ubahlah hasil fungsi for next ini dalam sebuah array yg nilainya terdiri dari 1,2,3,...,b/a.

      Gabungkan array ini dng fungsi Join di mana karakter penggabung (delimiter) disesuaikan dng default dr SeparatorCharacters Combo box.

      Catatan: untuk hasil b/a, bila ada sisa gunakan fungsi Int(b/a)+1. Bila tidak ada sisa, cukup Int(b/a) saja.

      Delete
  5. matur suwun sanget ... atas infonya mas.
    mau saya coba sesuai dengan petunjuk anda.

    sekali lagi terima kasih

    ReplyDelete
    Replies
    1. Sama2. Tolong info di sini kalau sudah bisa ya.

      Delete
  6. mas Yanto, aku gunakan spt dibawah ini:

    JlhHal = adalah jumlah halaman/jumlah tampilan yg diinginkan
    Hal = adalah Combobox yang dimaksud
    row source type = value list
    row source = saya kosongkan
    default Value = 1

    lalu buat function spt dibawah

    function CreatePages()

    Dim strNo As String
    Dim strUrut As String

    For x = 1 To Me.JlhHal
    If x = Me.JlhHal Then
    strNo = strUrut & x
    Else
    strNo = strUrut & x & ";"
    End If
    strUrut = strNo
    Next x

    Me.[Hal].RowSource = strNo

    end function

    Alahmdullilah ... tinggal call CreatePages ..bisa jalan.

    ReplyDelete
    Replies
    1. Baguslah kalau begitu. Tapi aku sarankan, tanda ";" pada strNo = strUrut & x & ";" sebaiknya diganti dengan Me.[Hal].SeparatorCharacters karena lebih dinamis, bisa menyesuaikan diri dengan setting di control panel/default Access options secara otomatis. Kalau tanda ";", bila defaultnya berbeda (misalnya ",") maka Access akan menampilkan error.

      Delete
  7. oo gitu ya mas ...
    Ok mas thanks atas sarannya ..

    rgds

    ReplyDelete

Post a Comment

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access