Option Compare Database
Option Explicit
Private m_colCombos As Collection
Private m_strFilter As String
Private Sub ApplyFilter(Optional ByVal Filter As String)
If Len(Filter) > 0 Then
FindRFQsubform.Form.Filter = Filter
FindRFQsubform.Form.FilterOn = True
Else
FindRFQsubform.Form.Filter = ""
FindRFQsubform.Form.FilterOn = False
End If
End Sub
Private Function BuildFilter()
Const c_LinkOperator As String = " AND "
Dim ctl As Control
Dim m_strFilter As String
Dim strCriteria As String
m_strFilter = ""
For Each ctl In m_colCombos
If Not IsNull(ctl.Value) Then
If Len(m_strFilter) > 0 Then m_strFilter = m_strFilter & c_LinkOperator
strCriteria = ctl.Tag & " Like " & GetQuotedValue(ctl.Tag, ctl.Value)
m_strFilter = m_strFilter & strCriteria
End If
Next ctl
ApplyFilter m_strFilter
End Function
Private Function GetQuotedValue(ByVal FieldName As String, ByVal Value As Variant) As String
Select Case FindRFQsubform.Form.RecordsetClone.Fields(FieldName).Type
Case dbMemo, dbText
GetQuotedValue = "'" & Value & "'"
Case dbDate, dbTime
GetQuotedValue = "#" & Format(Value, "mm/dd/yyyy hh:nn:ss") & "#"
Case Else
GetQuotedValue = Value
End Select
End Function
Private Sub InitializeComboCollection()
Const c_SQL As String = "SELECT DISTINCT NULL FROM @T UNION SELECT DISTINCT @C FROM @T;"
Dim ctl As Control
Set m_colCombos = New Collection
For Each ctl In Me.Controls
If ctl.ControlType = acComboBox Then
If ctl.HelpContextId = -4 Then
ctl.RowSource = Replace(Replace(c_SQL, "@T", "FindRFQ"), "@C", ctl.Tag)
ctl.AfterUpdate = "=BuildFilter()"
m_colCombos.Add ctl
End If
End If
Next ctl
End Sub
Private Sub Form_Open(Cancel As Integer)
InitializeComboCollection
End Sub