簡體   English   中英

MS Access – 過濾#Multiple Criteria 同時忽略 Null 值

[英]MS Access – Filtering #Multiple Criteria while Ignoring Null Values

本質上,我試圖在三個條件下過濾一個表單..沒有一個過濾器覆蓋前一個..

  1. 不符合項是打開還是關閉 –來源 = 選項按鈕
  2. 在日期范圍之間 –源 = 文本輸入字段
  3. 涉及哪些操作Source = Combobox

我決定使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM