Senin, 09 April 2012

[belajar-access] Filter di dalam Microsoft Access [6/6] (Pelajaran Terakhir)

 

Filter di dalam Microsoft Access [6/6] (Pelajaran Terakhir)

Pelajaran terakhir Gan... simak aja yah :-) .. he..he..

PENGGUNAAN ARGUMENT FILTERNAME

Pada pelajaran sebelumnya, saya selalu tidak menganjurkan untuk menggunakan argument FilterName, baik penggunaan filter melalui Macro maupun melalui VBA. Namun bagi Anda yang memang hendak menggunakan argument FilterName ini karena memang membutuhkannya, maka terdapat cara-cara yang harus dilakukan, antara lain adalah:

1. Membuat dahulu Filter tersebut, yakni dengan menggunakan fasilitas Filter by Form (Untuk Access MDB/ACCDB) atau Server Filter by Form (Untuk Access ADP).
2. Ketikkan criteria yang hendak Anda buat pada field-field yang tersedia.
3. Klik menu File -> Save As Query.

Maka filter yang telah di save sebagai query ini dapat digunakan sebagai argument untuk pengisian FilterName. Jika Anda telah mengisi argument FilterName, maka sudah tidak perlu lagi mengisi argument WhereCondition, kecuali jika Anda hendak memfilter lagi dari record yang telah di filter tersebut (filter bertingkat).


PENGGUNAAN FILTER DENGAN CRITERIA DARI MULTIPLE FIELD

Mungkin saja terjadi, ketika menggunakan filter, kita ingin memasukkan criteria dari banyak field. Misalnya saja kita telah membuat suatu form, dengan beberapa field di dalamnya. Misalnya nama field tersebut txtField1 (type Number), txtField2 (type Text), txtField3 (type Tanggal) dan txtField4 (type Tanggal). Criteria diambil dari seluruh field tersebut, namun jika salah satu field tidak terisi (Null), ia akan tetap menggunakan criteria lainnya dari field-field lainnya yang terisi. Rencananya, criteria ini akan diaplikasikan untuk memfilter suatu report.

Maka untuk mengatasi hal ini, kita dapat menggunakan tiga metode, yaitu:

1. Untuk data type selain tanggal, dapat menggunakan operator "Like" dan symbol asterik (*). Sebagai contoh:

Reports![NamaReport].Filter = "[NamaFieldNumber] Like *" & _
 Forms![NamaForm]![txtField1] & "* OR [NamaFieldText] Like '*" & _
 Forms![NamaForm]![txtField2] & "*'"

2. Untuk data type tanggal, dapat menggunakan fungsi IIF dan ISNULL serta operator Between [...] And [...]. Sebagai contoh:

Reports![NamaReport].Filter = "[NamaFieldTanggal] Between " & _
    IIf(IsNull(Forms![NamaForm]![txtField3]), #1/1/100#, Forms![NamaForm]![txtField3]) & _
    " AND " & IIf(IsNull(Forms![NamaForm]![txtField4]), #12/31/9999#, Forms![NamaForm]![txtField4])

3. Untuk data type tanggal, selain menggunakan metode no.2 diatas, kita dapat pula menggunakan fungsi Nz serta operator Between [...] And [...]. Metode ini lebih ringkas penulisannya, karena hanya membutuhkan satu fungsi. Contoh:

Reports![NamaReport].Filter = "[NamaFieldTanggal] Between " & _
    Nz(Forms![NamaForm]![txtField3], #1/1/100#) & _
    " AND " & Nz(Forms![NamaForm]![txtField4], #12/31/9999#)

Sehingga untuk membuat keseluruhan filter, kita tinggal menggabungkan seluruh metode diatas, misalnya:

Reports![NamaReport].Filter = "([NamaFieldNumber] Like *" & _
    Forms![NamaForm]![txtField1] & "* OR [NamaFieldText] Like '*" & _
    Forms![NamaForm]![txtField2] & "*') OR (" & _
    "[NamaFieldTanggal] Between " & _
    Nz(Forms![NamaForm]![txtField3], #1/1/100#) & _
    " AND " & Nz(Forms![NamaForm]![txtField4], #12/31/9999#) & ")"

Keterangan: Saya mengisi nilai minimum untuk tanggal adalah 1 January 100 dan nilai maksimumnya adalah 31 December 9999, karena hal tersebut memang sesuai dengan jangkauan (range) untuk data type tanggal di dalam VBA.


PENGGUNAAN FILTER DENGAN MULTIPLE CRITERIA DIPISAH OLEH OPERATOR "AND" ATAU "OR" DENGAN DATA CRITERIA BERASAL DARI DALAM TEXT BOX

Misalnya, kita ingin menulis secara langsung criteria untuk suatu filter, di dalam suatu text box (misal namanya adalah "txtFieldCriteria"), sbb:

[CustomerID] LIKE '*HANAR*' OR [CompanyName] LIKE '*ANA*'

atau bisa juga ditulis:

[CustomerID] LIKE "*HANAR*" OR [CompanyName] LIKE "*ANA*"

Maka hal tersebut bisa saja terjadi. Inginnya, filter diatas diaplikasikan ke suatu subform yang berisi seluruh data Customer. Lihatlah criteria diatas, terdapat 2 criteria untuk diaplikasikan pada suatu filter. Criteria ini bisa saja lebih dari 2 (tidak terbatas) dan bisa saja berbeda-beda. Maka untuk mewujudkan ini, kita cukup mendeklarasikan filternya langsung merujuk ke "txtFieldCriteria" tersebut. Misalnya:

NamaSubform.Form.Filter = Me![txtFieldCriteria]
NamaSubform.Form.FilterOn = True

Ketika tombol ApplyFilter yang telah kita buat melalui command button ditekan, maka akan dihasilkan suatu record dengan criteria sebagaimana tertulis diatas. Penggunaan filter dengan metode seperti ini membutuhkan pengetahuan akan penggunaan criteria di dalam Access. Karena itu jika Anda hendak memberikannya kepada user, harus diberitahu cara-caranya secara lengkap.


PENGGUNAAN FILTER DENGAN MULTIPLE CRITERIA DIPISAH OLEH OPERATOR "AND" ATAU "OR" DENGAN DATA CRITERIA BERASAL DARI DALAM TABLE (RECORD)

Perhatikanlah bahasan sebelum ini (diatas). Kita telah membuat criteria secara lengkap langsung di dalam satu text box. Bagaimanakah jika kita membuatnya di dalam suatu table, dengan criteria diisi per record? Apakah Anda sudah download Al-Qur'an Database 5.0 yang sudah saya susun? Disana ada fasilitas Advance Find. Nah, dengan menggunakan fasilitas Advance Find, pencarian ayat dan terjemahan Al-Qur'an jadi bisa dengan kriteria yang tidak terbatas (multiple criteria). Fasilitas ini sangat bermanfaat, karena mungkin saja kita hanya ingat kata-kata tertentu dalam suatu ayat. Maka dalam mencarinya, kita bisa menggunakan fasilitas Advance Find ini. Sebagai contoh:

Nama Field        | Nama Operator   | Criteria           | Operator Sambung
-------------------------------------------------------------------------
CustomerID       | LIKE                  | '*HANAR*'   | OR
CompanyName  | LIKE                  | '*ANA*'        | AND
dll...                    | dll...                    |  dll...               | dll...

Maka untuk penggunaan metode seperti diatas, kita harus menggabungkan masing-masing record menjadi satu kesatuan string. Untuk keperluan ini, kita harus menggunakan VBA, misalnya menggunakan procedure sbb:

Private Sub cmdApplyFilter_Click()
    'Contoh penggunaan Filter dengan criteria dari suatu table
    'Copyright (c) by Sofyan Efendi bin Lilik Mustafa, all rights reserved.
    DoCmd.RunCommand acCmdRefreshPage
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strFilter As String
    Dim JmlRecord As Long
    Dim lngStartCount As Long
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("NamaTable_Untuk_FilterCriteria", dbReadOnly)
    JmlRecord = DCount("[Nama Field]", "[NamaTable_Untuk_FilterCriteria]")
    rs.MoveFirst
    strFilter = ""
    For lngStartCount = 1 To (JmlRecord - 1)
        strFilter = strFilter & " [" & rs![Nama Field] & "] " & _
                    rs![Nama Operator] & " " & _
                    rs![Criteria] & " " & _
                    rs![Operator Sambung]
        rs.MoveNext
    Next
    strFilter = strFilter & " [" & rs![Nama Field] & "] " & _
                rs![Nama Operator] & " " & _
                rs![Criteria]
    NamaSubform.Form.Filter = strFilter
    NamaSubform.Form.FilterOn = True
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

Keunggulan metode ini dibandingkan metode sebelumnya adalah kita hanya tinggal mengisi field "Criteria" saja, sedangkan "Nama Field", "Nama Operator" dan "Operator Sambung" tinggal dipilih dari combo box yang ada. Selain itu, kita bisa mengisi "Nama Operator" dengan operator lainnya, seperti : =, <, >, <>, >=, <=, dll. Dibanding metode sebelumnya, saya melihat metode ini sangat luas cakupan criterianya karena criteria bisa diisi secara bebas oleh kita, dengan penulisan yang mudah. Selain itu, metode ini sangat fleksible karena jumlah criteria dapat diisi secara tidak terbatas, sesuai dengan jumlah record yang ada. Jika Anda hendak memberikan program ini kepada user, maka Anda harus memberitahu secara lengkap cara mengisi field "Criteria" ini.


MENGGUNAKAN FILTER ATAU QUERY?

Setelah mempelajari penggunaan filter yang telah sama-sama kita bahas ini, mungkin muncul pertanyaan dari dalam pikiran kita, manakah yang seharusnya kita lakukan dalam melihat dan menyaring suatu data, menggunakan filter atau query? Manakah yang lebih baik, membuat suatu filter dengan criterianya, atau membuat query yang telah diberikan criteria?

Maka pada sub-bab ini saya hendak menjelaskan perbedaan dan juga kesamaan antara Filter dan Query, sehingga kita akan mengetahui kapan sebaiknya menggunakan filter dan kapan sebaiknya menggunakan query.

1. Dalam Hal Kecepatan

Dalam menampilkan data, Query lebih cepat dibandingkan dengan Filter. Query telah disaring dahulu sebelum seluruh data ditampilkan, adapun Filter menampilkan dahulu seluruh data, baru kemudian disaring dengan criteria yang telah ditentukan.

2. Dalam Hal Fleksibilitas

Filter lebih fleksible dibandingkan Query. Kita harus membuat dahulu query, lalu membuat criteria, barulah data dapat ditampilkan sesuai yang kita inginkan. Namun Filter langsung dapat mengaplikasikan filter dan criterianya ke berbagai object Access secara langsung melalui VBA, dengan syarat object tersebut dalam keadaan terbuka.

3. RecordSource

Hanya query yang dapat dijadikan sebagai recordsource, dan filter hanyalah berfungsi sebagai penyaring dari data yang sudah ada.

4. Fungsinya

Query memiliki fungsi yang sangat luas. Selain berfungsi untuk menampilkan data sesuai criteria yang kita inginkan, ia dapat pula melakukan berbagai proses lainnya, seperti action query dan lain-lain. Query dapat menggabungkan beberapa table ataupun query-query lainnya menjadi satu query yang berisi data-data yang kita perlukan. Adapun Filter hanya bersifat sebagai penyaring data saja. Namun jika query tersebut digunakan hanya untuk menampilkan data dengan criteria tertentu, maka fungsinya sama saja dengan filter, dan dalam hal ini mungkin Filter lebih baik untuk digunakan daripada Query.

5. Dalam Hal Kemudahan Pembuatan

Saya merasa bahwa membuat filter lebih mudah daripada kita harus membuat query dahulu lalu dibuat criterianya.

6. Ketiadaan Filter

Inilah yang harus kita pahami. Filter tidak mungkin ada jika tidak ada Table, karena data manakah yang hendak di filter? Begitu pula, untuk penggunaan select query yang telah menggabungkan beberapa table menjadi satu query, filter ini tidak akan pernah bisa dibuat jika tidak ada query tersebut. Jadi filter ada karena table dan query ada.

7. Sama-sama Dapat Menyaring

Query dan Filter sama-sama dapat menampilkan data yang telah di set dengan criteria tertentu.

8. Perubahan Criteria

Filter dan Query sama-sama bisa diubah criterianya melalui VBA, dengan sumber criteria bisa berasal dari object-object di dalam Access. Namun demikian, dalam hal ini Filter lebih unggul dari Query, karena ia mempunyai fasilitas Remove Filter. Sehingga dalam hal kecepatan perubahan criteria untuk menampilkan data-data yang lain, Filter lebih baik dari Query.

Demikianlah beberapa perbandingan antara Query dan Filter. Silahkan Anda gunakan secara tepat dan bijaksana. Untuk kasus tertentu, Anda harus langsung bermain dari query. Dan untuk kasus lainnya, lebih baik menggunakan Filter. Berkelanalah dahulu dengan Query dan Filter untuk penggunaan yang kontinue, bandingkan mereka sesuai dengan versi Anda, kelak Anda akan mengetahui metode yang terbaik untuk menyaring dan menampilkan data Anda.


ORDER (SORT)

Sebagaimana rencana awal saya pada pelajaran pertama dari FIlter, setelah pembahasan Filter ini kita selesaikan seluruhnya, saya ingin membahas pula mengenai Order (sort). Order dibutuhkan untuk mengurutkan data atau record berdasarkan urutan-urutan tertentu. Terdapat dua metode urutan didalam Access, yaitu Ascending dan Descending. Ascending mengurutkan data dari nilai terkecil ke nilai terbesar, misal dari A s/d Z, dari 1 s/d 10, dan dari 1-Jan s/d 31-Des. Adapun Descending kebalikannya, ia mengurutkan data dari nilai terbesar ke nilai terkecil, misalnya dari Z s/d A, dari 10 s/d 1, dan dari 31-Des s/d 1-Jan.

Dalam menentukan Order, terdapat beberapa cara, diantaranya:

1. Secara manual (lewat menu, toolbar dan popup menu).
2. Melalui properties object tersebut.
3. Melalui VBA.

Mari kita bahas sama-sama penggunaan 3 metode Order diatas.

1. Order Secara Manual (Lewat Menu, Toolbar dan Popup Menu)

Untuk mengurutkan data secara manual, klik dahulu column atau salah satu field didalam column yang hendak di urutkan, kemudian lakukan salah satu langkah berikut ini:

· Untuk sort ascending, pilih dahulu field pada column yang hendak disort, kemudian klik menu Records -> Sort -> Sort Ascending atau klik toolbar Sort Ascending atau klik kanan field pada column yang hendak disort tersebut, kemudian pilih menu Sort Ascending.

· Untuk sort descending, pilih dahulu field pada column yang hendak disort, kemudian klik menu Records -> Sort -> Sort Descending atau klik toolbar Sort Descending atau klik kanan field pada column yang hendak disort tersebut, kemudian pilih menu Sort Descending.

Metode ini hanya bisa mengurutkan data atau record berdasarkan satu field saja.

2. Order Melalui Properties Object Tersebut

Untuk object Table, Query, Form dan Report, ketika kita masuk ke mode design view, terdapat properties Order yang dapat kita set nilainya untuk mengurutkan data atau record di dalam object tersebut saat berada pada mode Object View (Run). Properties Order ini letaknya tepat berada dibawah properties Filter, dengan nama property "Order By". Keuntungan metode ini dibanding metode sebelumnya adalah pada metode ini bisa mengurutkan data atau record berdasarkan lebih dari satu field.

Tata cara menulis property "Order By" ini adalah sbb:

- Untuk mengurutkan data secara Ascending, maka cukup ditulis nama fieldnya saja. Misalnya: "CustomerID"
- Untuk mengurutkan data secara Descending, maka harus ditulis nama fieldnya dengan diakhiri dengan kata DESC. Misalnya: "CustomerID DESC"
- Jika pengurutan data berdasarkan pada lebih dari satu field, maka harus dipisah dengan tanda koma (,) antara masing-masing field tersebut. Misalnya: "CustomerID, CompanyName, ContactName DESC"
- Jika terdapat spasi di dalam nama field, maka penulisan nama field tersebut harus diapit dengan symbol []. Misalnya: "[Customer ID], [Company Name], [Contact Name] DESC"

Setelah properties Order diset, maka untuk melihat hasil pengurutan data di dalam Object tersebut, harus di Apply Filter/Sort, diantaranya bisa menggunakan menu Records -> Apply Filter/Sort. Adapun untuk object report, kita dapat menampilkan hasil dari properties "Order By" ini secara otomatis, dengan cara diset secara langsung melalui properties "Order By On" = Yes.

3. Order Melalui VBA

Hanya object Form dan Report yang dapat diset properties Order nya melalui VBA. Contoh:

Me.OrderBy = "CompanyName, [Contact Name] DESC" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.OrderByOn = True

Me.Form.OrderBy = "CompanyName, [Contact Name] DESC" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.Form.OrderByOn = True

NamaSubForm.Form.OrderBy = "CompanyName, [Contact Name] DESC" 'Contoh untuk subform yang sedang aktif dan dalam keadaan terbuka.
NamaSubForm.Form.OrderByOn = True

Forms![NamaForm].Form.OrderBy = "CompanyName, [Contact Name] DESC" 'Contoh untuk form utama yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm].Form.OrderByOn = True

Forms![NamaForm]![NamaSubForm].Form.OrderBy = "CompanyName, [Contact Name] DESC" 'Contoh untuk subform yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm]![NamaSubForm].Form.OrderByOn = True

Begitu pula untuk report, tinggal diganti nama object dan nama control nya. Terlihat pada contoh di atas, setiap selesai mendeklarasikan properties OrderBy, properties "OrderByOn" harus di set menjadi ON (True/Yes). Jika Anda menginginkan cara manual, maka bisa menggunakan menu Records -> Apply Filter/Sort. Namun untuk penggunaan di dalam report, properties "OrderByOn" ini dapat di set secara langsung (otomatis) melalui properties "Order By On" = Yes, yakni pada mode design view report tersebut.


PENGGUNAAN MULTIPLE ORDER DENGAN DATA UNTUK ORDER BERASAL DARI DALAM TABLE (RECORD)

Sebagaimana pada penggunaan Filter dengan multiple criteria dari suatu table, maka untuk penggunaan Order pun kita dapat menerapkannya. Sebagai contoh:

Nama Field      | Jenis Sort
-----------------------------------------
ContactName  | Descending
Country           |
dll...                 | dll...

Maka untuk penggunaan metode seperti diatas, kita harus menggabungkan masing-masing record menjadi satu kesatuan string. Untuk keperluan ini, kita harus menggunakan VBA, misalnya menggunakan procedure sbb:

Private Sub cmdApplySort_Click()
    'Contoh penggunaan Sort dengan criteria dari suatu table
    'Copyright (c) by Sofyan Efendi bin Lilik Mustafa, all rights reserved.
    DoCmd.RunCommand acCmdRefreshPage
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSort As String
    Dim JmlRecord As Long
    Dim lngStartCount As Long
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("NamaTable_Untuk_SortCriteria", dbReadOnly)
    JmlRecord = DCount("[Nama Field]", "[NamaTable_Untuk_SortCriteria]")
    rs.MoveFirst
    strSort = ""
    For lngStartCount = 1 To (JmlRecord - 1)
        strSort = strSort & " [" & rs![Nama Field] & "] " & _
                    rs![Jenis Sort] & ", "
        rs.MoveNext
    Next
    strSort = strSort & " [" & rs![Nama Field] & "] " & _
                rs![Jenis Sort]
    NamaSubform.Form.OrderBy = strSort
    NamaSubform.Form.OrderByOn = True
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub


KESIMPULAN

1. Sebelum menggunakan Filter, harus dipahami dengan baik tata cara menggunakan criteria di dalam Access.
2. Dalam hal mengaplikasikan filter melalui VBA, menggunakan perintah Docmd.ApplyFilter adalah cara yang terbaik, karena ia dapat menjangkau lebih banyak object di dalam Access.
3. Penggunaan filter dengan multiple criteria dipisah oleh operator "and" atau "or" dengan data criteria berasal dari dalam table (record) adalah metode terbaik dalam mengaplikasikan filter di dalam Access dengan criteria yang tak terbatas.
4. Penggunaan multiple order dengan data untuk order berasal dari dalam table (record) adalah metode terbaik dalam menerapkan penggunaan Order di dalam Access, karena pengurutan data dapat dilakukan secara tidak terbatas.
5. Criteria yang diterapkan di dalam Filter sama persis penggunaannya dengan criteria di dalam Query.

Untuk kesimpulan-kesimpulan lainnya saya serahkan kepada Anda. Silahkan Anda rangkum sendiri sebagaimana yang telah Anda pahami dari seluruh tulisan yang telah sama-sama kita bahas ini.


PENUTUP

Alhamdulillah, selesai sudah bahasan mengenai Filter ini, dari bagian 1 s/d 6. Semoga tulisan ini memberi banyak manfaat khususnya untuk saya pribadi dan juga Mas Harry Siswanto, dan umumnya untuk kita semua. Amiin.

Mohon do'a dari rekan2 semua yah, insya Allah sore hari ini saya ikut turnamen tenis meja, baru babak penyisihan, mudah2an dimudahkan dalam melakukan serve dan dalam menerima serve, dalam melakukan pukulan2 selalu tepat ke meja lawan, dan dijauhkan dari rasa ujub dan kesombongan bila menang, dan tidak putus asa bila kalah. Amiin ya Allah. Terima Kasih. :-)
 
Wassalaamu'alaikum Warahmatullahi Wabarakatuh,
Sofyan Efendi
http://imopi.wordpress.com/

__._,_.___
Recent Activity:
SPAM IS PROHIBITED
.

__,_._,___

Tidak ada komentar:

Posting Komentar