Фильтрация формы с несколькими флажками - PullRequest
0 голосов
/ 10 августа 2011

У меня есть форма, которая показывает информацию о компании, а также подчиненную форму с несколькими контактами, которая показывает контактную информацию, разделенную на обязанности по работе с контактами (вкладка).

У меня есть поле со списком в форме компаниикоторый отображает должностные обязанности, и после выбора ответственности будут отображаться только записи компании с контактом выбранной ответственности.Это код;

Sub SetFilter()

Dim ASQL As String

If IsNull(Me.cboshowcat) Then
' If the combo and all check boxes are Null, use the whole table as the RecordSource.
Me.RecordSource = "SELECT company.* FROM company"

Else

ASQL = "SELECT company.* FROM company INNER JOIN Contacts ON company.company_id = Contacts.company_id WHERE Contacts.responsibility= '" & cboshowcat & "'"
Form_Startup.RecordSource = ASQL

End If

End Sub

В таблице компаний будут отображаться только записи с контактами типа, указанного в поле со списком cboshowcat, без отображения дублирующих компаний в главной форме.

Затем я хочу применить некоторые дополнительные фильтры на основе флажков в главной форме, которые относятся к полям в подчиненной форме контактов.Они активируются кнопкой вместе с кодом источника записи сверху;

Private Sub Command201_Click()

If Nz(Me.cboshowcat) = "" And Me.Check194 = True Or Nz(Me.cboshowcat) = "" And Me.Check199 = True Or Nz(Me.cboshowcat) = "" And Me.Check205 = True Then
    MsgBox "Please Select a Job Responsibility"
    Cancel = True
Else

SetFilter
If Me.Check194 = True Then
Me.Filter = "cedit <=Date()-90"
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
If Me.Check199 = True Then
Me.Filter = "((copt)='No')"
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
If Me.Check205 = True Then
Me.Filter = "exsite is null"
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End If
End If
End If

End Sub

В данный момент кнопка отфильтровывает выбранные контакты по категории, но если установлено более 1 флажка, используется только один изфильтры.Как сделать так, чтобы в нем использовалось несколько фильтров, в зависимости от того, какой флажок установлен?

1 Ответ

0 голосов
/ 10 августа 2011

Если вы хотите фильтровать по нескольким критериям, то вам нужно создать значение строки фильтра, чтобы отразить это.Например:

Me.Filter = "cedit <=Date()-90 AND exsite is null"

Начните с пустой строки и пройдите по флажкам, создавая строку соответствующим образом: если в конце этого процесса есть строка фильтра, примените ее.

Вотпредложение о том, как сделать это эффективно:

Dim sFilter as String
sFilter=""

'...
If Me.Check194 Then BuildFilter sFilter, "cedit <=Date()-90" 
If Me.Check205 Then BuildFilter sFilter, "exsite is null"
If Me.Check199 Then BuildFilter sFilter, "((copt)='No')" 
'... more checkboxes...


Me.FilterOn = Len(sFilter)>0
Me.Filter = sFilter
'....


Sub BuildFilter(byRef sFilt as string, sAdd as string)
   If len(sFilt)>0 Then sFilt = sFilt & " AND "
   sFilt = sFilt & sAdd
End sub
...