[英]MS Access – Filtering #Multiple Criteria while Ignoring Null Values
本質上,我試圖在三個條件下過濾一個表單..沒有一個過濾器覆蓋前一個..
我決定使用 If 語句來覆蓋選項按鈕。 如果選項 xx 為真,則過濾器工作正常,直到 combobox 或日期輸入文本字段中有一個空白值。然后返回一個錯誤,說明 Extra) in query expression
If Me.Option54 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")And ([NCR Clsd?]=False)"
End If
If Me.Option56 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")And ([NCR Clsd?]=True)"
End If
If Me.Option54 = False And Me.Option56 = False Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")"
End If
Me.FilterOn = True
如果源字段為空,是否有忽略過濾器的方法?
我似乎無法讓 IsNull 命令實際執行任何操作
如果未提供條件,要么有更多條件語句不使用過濾器,要么處理 null 以替換為另一個值。
Nz([Date], #1/1/1900#)
Format(Nz([TxtDtStrt], #1/1/1900#))
Format(Nz([TxtDtEnd], #12/31/2099#))
我找到的最終解決方案是使用 IsNull 和 Not IsNull 作為 Boolean 結合 IF 並覆蓋公共子中的所有可能組合
然后在點擊每個過濾器時調用 public sub ..它的工作原理,只是想知道是否有更優雅的方法......
Public Sub NCRDtFltr()
If IsNull(Me.Combo58.Value) And Me.Option54 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([NCR Clsd?]=False)"
End If
If IsNull(Me.Combo58.Value) And Me.Option56 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([NCR Clsd?]=True)"
End If
If IsNull(Me.Combo58.Value) And Me.Option54 = False And Me.Option56 = False Then
Filter = "[Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#"
End If
If Not IsNull(Me.Combo58.Value) And Me.Option54 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")And ([NCR Clsd?]=False)"
End If
If Not IsNull(Me.Combo58.Value) And Me.Option56 = True Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")And ([NCR Clsd?]=True)"
End If
If Not IsNull(Me.Combo58.Value) And Me.Option54 = False And Me.Option56 = False Then
Filter = "([Date] Between #" & Format([TxtDtStrt], "yyyy\/mm\/dd") & "# And #" & Format([TxtDtEnd], "yyyy\/mm\/dd") & "#) And ([OpDescription]=" & ([Combo58]) & ")"
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.