2017-09-19 61 views
0

我正在創建一個報告,向我顯示每個班次的人員。我有一個組合框,可以選擇一個特定的班次,或者留空白顯示所有班次。從組合框中選擇一個值將該文本鏡像到隱藏文本框,然後將其傳遞給查詢。現在,通過輪班篩選報告是一件容易的事情,現在我在牙齒上踢我的是如何設置它,以便如果我的Shift Filter框爲空以顯示像WHERE子句爲空的所有記錄?MS Access SQL - 我如何有條件地爲所有條件設置標準?

這裏是我的SQL代碼:

SELECT DISTINCTROW tblPersonnel.EmpID 
    ,tblRank.Rank 
    ,tblPersonnel.NameStr 
    ,tblPersonnel.Shop 
    ,qryShiftRosterSub.Narrative 
    ,qryShiftRosterSubShift.CurrentShift 
    ,qryShiftRosterSubShift.ShopName 
    ,tblRank.ID 
FROM (
    (
     tblPersonnel LEFT JOIN qryShiftRosterSubShift ON tblPersonnel.EmpID = qryShiftRosterSubShift.EmpID 
     ) LEFT JOIN tblRank ON tblPersonnel.Rank = tblRank.ID 
    ) 
LEFT JOIN qryShiftRosterSub ON tblPersonnel.EmpID = qryShiftRosterSub.EmpID 
WHERE (
     ((qryShiftRosterSubShift.CurrentShift) = IIf(Len([Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) = 0, 'Is Not Null', [Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter])) 
     AND ((tblPersonnel.DeleteFlag) = False) 
     ); 

我有一個鏈接在一起的幾個疑問,這是完成數據集前最後一個被髮送到報告。就像我說的,我可以很容易地向我展示特定的轉換,並通過清除CurrentShift中的條件,我可以讓它顯示所有記錄,但是如何根據我的過濾器中的內容在兩者之間切換框?

回答

1

你可以只添加一個OR子句來檢查,如果組合框爲空。請注意,您都需要考慮""空字符串和Null值。我喜歡用檢查Nz(MyComboBox) = ""

實現:

SELECT DISTINCTROW tblPersonnel.EmpID 
    ,tblRank.Rank 
    ,tblPersonnel.NameStr 
    ,tblPersonnel.Shop 
    ,qryShiftRosterSub.Narrative 
    ,qryShiftRosterSubShift.CurrentShift 
    ,qryShiftRosterSubShift.ShopName 
    ,tblRank.ID 
FROM (
    (
     tblPersonnel LEFT JOIN qryShiftRosterSubShift ON tblPersonnel.EmpID = qryShiftRosterSubShift.EmpID 
     ) LEFT JOIN tblRank ON tblPersonnel.Rank = tblRank.ID 
    ) 
LEFT JOIN qryShiftRosterSub ON tblPersonnel.EmpID = qryShiftRosterSub.EmpID 
WHERE (
     ((qryShiftRosterSubShift.CurrentShift) = IIf(Len([Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) = 0, 'Is Not Null', [Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) 
     OR Nz([Forms] ! [frmNavMain] ! [NavigationSubform] ! [ShiftFilter]) = "") 
     AND ((tblPersonnel.DeleteFlag) = False) 
     ); 
+0

好了,所以與表達建成事情是這樣的,它的工作原理是真棒,但它本質上治療_Nz(... [ShiftFilter]) =「」_作爲通配符? – Chaosbydesign

+0

我完全不明白你的意思是通配符。這只是一個替代條件。 '((qryShiftRoste .... = ... ftFilter])爲真,或者Nz([Forms]![frmNavMain]![NavigationSubform]![ShiftFilter])=「」)'爲真。 –

0

如果您的組合框不是空的,爲什麼不附加SQL的'WHERE'部分?

1

你可以嘗試使用情況是這樣的:

qryShiftRosterSubShift.CurrentShift = [Forms]![frmNavMain]![NavigationSubform]![ShiftFilter] 
OR Len(Nz([Forms]![frmNavMain]![NavigationSubform]![ShiftFilter],""))= 0