Senin, 09 April 2012

[belajar-access] Filter di dalam Microsoft Access [5/6]

 

Filter di dalam Microsoft Access [5/6]

Eit dah, lagi demen belajar, lanjutttt truzzz Gan ... Ngetiks lagi dan lagi, yg penting BELAJAR, OK GAN ? he..he....

PENGGUNAAN FILTER MELALUI VBA
 
Diantara ketiga metode sebelumnya yang telah sama-sama kita bahas, barangkali metode penggunaan filter inilah yang paling penting, yang harus kita pelajari dan fahami dengan sebaik-baiknya. Sebabnya adalah penggunaan filter melalui VBA ini dapat diset secara fleksible dan otomatis. Ia memiliki kemampuan filter paling luas cakupannya dibanding ketiga metode sebelumnya. Ia dapat diset melalui hampir semua event dan properties yang tersedia, dan filter tersebut akan secara otomatis dijalankannya tanpa kita harus masuk ke mode design dahulu.
 
Terdapat lima metode filter yang dapat dilakukan melalui VBA, yaitu:
 
1. Menggunakan perintah DoCmd.Open[Object]
2. Menggunakan perintah Docmd.ApplyFilter
3. Menggunakan property [Object].Filter (khusus untuk MDB & ACCDB)
4. Menggunakan property [Object].ServerFilter (khusus untuk ADP dan Data Access Pages di ADP/MDB)
5. Menggunakan perintah Recordset.Filter (khusus untuk penggunaan recordset di dalam ADO dan DAO)
 
Saya akan coba jelaskan masing-masing penggunaan kelima metode filter diatas.
 

1. Menggunakan perintah DoCmd.Open[Object]
 
Hanya ada 2 object yang dapat menggunakan fasilitas filter seperti ini, yaitu Form dan Report. Kedua object ini menggunakan filter pada argument "WhereCondition". Penggunaan masing-masing perintah filter tersebut adalah:
 
a. DoCmd.OpenForm, dengan syntax:
 
OpenForm(FormName, [View As AcFormView = acNormal], [FilterName], [WhereCondition], [DataMode As AcFormOpenDataMode = acFormPropertySettings], [WindowMode As AcWindowMode = acWindowNormal], [OpenArgs])
 
Contoh penggunaan:
 
DoCmd.OpenForm "Employees", , ,"LastName = 'King'"
 
b. DoCmd.OpenReport, dengan syntax:
 
OpenReport(ReportName, [View As AcView = acViewNormal], [FilterName], [WhereCondition], [WindowMode As AcWindowMode = acWindowNormal], [OpenArgs])
 
Contoh penggunaan:
 
DoCmd.OpenReport "Sales Report", acViewNormal, ,"CustomerID = 'ALFKI'"
 
Penggunaan metode seperti ini adalah hanya untuk menset filter saat object tersebut dibuka pertama kali, dan kita tidak bisa merubah filter tersebut saat form sudah aktif (kecuali dengan menggunakan metode lainnya). Metode ini hanya cocok untuk penggunaan filter saat membuka form dan report, yang ketika dibuka kemudian obejct tersebut aktif sudah langsung terfilter dengan criteria tertentu.
 

2. Menggunakan perintah Docmd.ApplyFilter
 
Sebagaimana penggunaan ApplyFilter Action di dalam Macro, penggunaan perintah Docmd.ApplyFilter di dalam VBA pun tidak jauh berbeda cara menggunakannya. Namun, terdapat perbedaan yang paling mencolok pada metode ini, yaitu maksimum karakter yang dapat diisi di argument "Where Condition" adalah sebanyak 32,768 karakter, hal ini berbeda jauh dengan maksimum karakter yang dapat diisi di argument "Where Condition" di dalam macro, yang hanya bisa diisi maksimal 255 karakter saja. Syntax nya adalah:
 
ApplyFilter(FilterName, WhereCondition)
 
Contoh penggunaan:
 
DoCmd.ApplyFilter , "LastName = 'King'" 'Untuk object Form atau Report yang sedang aktif dan dalam keadaan terbuka.
 
DoCmd.ApplyFilter , "Forms![NamaForm]![NamaControl] = '[Criteria_Anda]'" 'Untuk object Form atau Report yang sedang tidak aktif namun dalam keadaan terbuka.
 
DoCmd.ApplyFilter , "[NamaTable/Query]![NamaField/Column] = '[Criteria_Anda]'" 'Untuk object Table atau Query yang sedang aktif ataupun tidak aktif namun dalam keadaan terbuka.
 

3. Menggunakan property Object.Filter (khusus untuk MDB & ACCDB)
 
Metode ini hanya dapat diterapkan di dalam Access MDB & ACCDB, dan hanya untuk object Form dan Report. Cara kerja filter ini adalah ia akan menset melalui VBA, properties Filter pada object tersebut. Sebelum melakukan filter, khusus untuk object Form, pastikan bahwa properties "Allow Filters" harus sudah di set menjadi "Yes" (menset properties ini bisa juga melalui VBA).
 
Contoh penggunaan:
 
Me.Filter = "Country = 'USA'" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.FilterOn = True
 
Me.Form.Filter = "Country = 'USA'" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.Form.FilterOn = True
 
NamaSubForm.Form.Filter = "Country = 'USA'" 'Contoh untuk subform yang sedang aktif dan dalam keadaan terbuka.
NamaSubForm.Form.FilterOn = True
 
Forms![NamaForm].Form.Filter = "Country = 'USA'" 'Contoh untuk form utama yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm].Form.FilterOn = True
 
Forms![NamaForm]![NamaSubForm].Form.Filter = "Country = 'USA'" 'Contoh untuk subform yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm]![NamaSubForm].Form.FilterOn = True
 
Begitu pula untuk report, tinggal diganti nama object dan nama control nya. Terlihat pada contoh di atas, setiap selesai mendeklarasikan suatu filter, properties "Filter On" 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 "Filter On" ini dapat di set secara langsung (otomatis) melalui properties "Filter On" = Yes, yakni pada mode design view report tersebut.
 

4. Menggunakan property [Object].ServerFilter (khusus untuk ADP dan Data Access Pages di ADP/MDB)
 
Metode ini hanya dapat diterapkan di dalam Access ADP (untuk Form dan Report) dan untuk object Data Access Page (di dalam ADP dan MDB). Cara kerja filter ini adalah ia akan menset melalui VBA, properties ServerFilter pada object tersebut. Sebelum melakukan filter, khusus untuk object Form, pastikan bahwa properties "Allow Filters" harus sudah di set menjadi "Yes" (menset properties ini bisa juga melalui VBA).
 
Contoh penggunaan:
 
Me.ServerFilter = "Country = 'USA'" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.ServerFilterByForm = True
 
Me.Form.ServerFilter = "Country = 'USA'" 'Contoh untuk form utama yang sedang aktif dan dalam keadaan terbuka.
Me.Form.ServerFilterByForm = True
 
NamaSubForm.Form.ServerFilter = "Country = 'USA'" 'Contoh untuk subform yang sedang aktif dan dalam keadaan terbuka.
NamaSubForm.Form.ServerFilterByForm = True
 
Forms![NamaForm].Form.ServerFilter = "Country = 'USA'" 'Contoh untuk form utama yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm].Form.ServerFilterByForm = True
 
Forms![NamaForm]![NamaSubForm].Form.ServerFilter = "Country = 'USA'" 'Contoh untuk subform yang sedang tidak aktif namun dalam keadaan terbuka.
Forms![NamaForm]![NamaSubForm].Form.ServerFilterByForm = True
 
Begitu pula untuk report dan data access page, tinggal diganti nama object dan nama control nya. Terlihat pada contoh di atas, setiap selesai mendeklarasikan suatu ServerFilter, properties "ServerFilterByForm" 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 "ServerFilterByForm" ini dapat di set secara langsung (otomatis) melalui properties "Filter On" = Yes, yakni pada mode design view report tersebut.
 

5. Menggunakan perintah Recordset.Filter (khusus untuk penggunaan recordset di dalam ADO dan DAO)
 
Setiap kita mendeklarasikan suatu recordset di dalam ADO maupun DAO, misalnya:
 
Dim rs As ADODB.Recordset 'Untuk ADO
Dim rs As DAO.Recordset 'Untuk DAO
 
Maka kita mendapat fasilitas Filter untuk variable "rs" tersebut. Cara menggunakannya dapat melihat contoh sbb:
 
rs.Filter "Country = 'USA'"
 
Adapun untuk nama control yang menggunakan spasi, maka harus diapit oleh tanda [], contoh:
 
rs.Filter "[Nama Negara] = 'USA'"
 

MENGHAPUS FILTER MELALUI VBA
 
Untuk menghapus filter melalui VBA, aktifkan dahulu object tersebut, kemudian gunakan perintah:
 
DoCmd.RunCommand acCmdRemoveFilterSort
 
Contoh:
 
DoCmd.SelectObject acForm, "NamaForm", False
DoCmd.RunCommand acCmdRemoveFilterSort
 
Pada fungsi SelectObject diatas, selain dapat digunakan untuk mengaktifkan form (acForm), dapat pula digunakan untuk mengaktifkan object-object lainnya, diantaranya:
 
- acDataAccessPage
- acDefault
- acDiagram
- acFunction
- acMacro
- acModule
- acQuery
- acReport
- acServerView
- acStoredProcedure
- acTable 
 
Adapun argument False pada fungsi SelectObject diatas menyatakan bahwa object tersebut sedang dalam keadaan terbuka. Jika argument ini tidak diisi, maka secara default, nilai yang diambil adalah False.
 

EVENT FILTER DAN EVENT APPLYFILTER DI DALAM FORM
 
Di dalam object Form, baik pada Access MDB maupun Access ADP, terdapat dua event berkaitan dengan filter, yakni:
 
1. Event Filter, digunakan untuk memberikan suatu aksi ketika di dalam object, filternya hendak diisi dengan suatu nilai, baik menggunakan cara manual (lewat menu, toolbar dan popup menu) maupun melalui VBA. Syntax nya adalah:
 
Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)
 
Contoh penggunaan:
 
Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)
    If FilterType = acFilterByForm Then
        Forms!Orders!TotalDue.Enabled = False
    ElseIf FilterType = acFilterAdvanced Then
        MsgBox "The best way to filter this form is to use the " _
            & "Filter By Form command or toolbar button.", vbOKOnly + vbInformation
        Cancel = True
    End If
End Sub
 
2. Event ApplyFilter, digunakan untuk memberikan suatu aksi ketika di dalam object, filter yang sudah diisi hendak di aktifkan dengan cara ApplyFilter, baik menggunakan cara manual (lewat menu, toolbar dan popup menu) maupun melalui VBA. Syntax nya adalah:
 
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
 
Contoh penggunaan:
 
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
    If Not IsNull(Me.Filter) And (InStr(Me.Filter, "Orders.Paid = -1")>0 _
            Or InStr(Me.Filter, "Orders.Paid = True")>0)Then
        If ApplyType = acApplyFilter Then
            Forms!Orders!AmountDue.Visible = False
            Forms!Orders!Tax.Visible = False
            Forms!Orders!TotalDue.Visible = False
        ElseIf ApplyType = acShowAllRecords Then
            Forms!Orders!AmountDue.Visible = True
            Forms!Orders!Tax.Visible = True
            Forms!Orders!TotalDue.Visible = True
        End If
    End If
End Sub
 
Jadi perbedaan utama antara event Filter dengan event ApplyFilter adalah, jika pada event Filter baru akan dibuat filternya, sedangkan pada event ApplyFilter, filter tersebut sebenarnya sudah dibuat, hanya tinggal di aktifkan (di ApplyFilter) saja.

Wassalaamu'alaikum Warahmatullahi Wabarakatuh,
Sofyan Efendi
http://imopi.wordpress.com/

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

__,_._,___

Tidak ada komentar:

Posting Komentar