2017-09-19 20 views
0

私は、シフトごとに担当者を表示するレポートを設定しています。私は、特定のシフトを選択することができるコンボボックスを持つフォームを持っているか、それを空白のままにしてすべてのシフトを表示します。コンボボックスから値を選択すると、そのテキストが非表示のテキストボックスに反映され、そのテキストボックスがクエリに渡されます。今、シフトでフィルタリングするレポートを取得するのが簡単な部分です。歯の中で私を蹴っているのは、WHERE句が空白の場合のようにすべてのレコードを表示するためにShift Filterボックスが空の場合、 ?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) 
     ); 

私は一緒に連鎖されているいくつかのクエリを持っているし、これが完成したデータセット前の最後の1がレポートに送信されています。私が言ったように、私はそれを私にちょうど特定のシフトを簡単に示すために得ることができ、CurrentShiftからの基準をクリアすることによって、すべてのレコードを表示することができますが、私はそれをフィルタに入っているものに基づいてボックス?

答えて

1

。両方とも空の文字列""と、Nullの値を考慮する必要があることに注意してください。私が使用してチェックすることを好むNz(MyComboBox) = ""

実装:

式はそれが道を内蔵したので、それは素晴らしいしている動作しますが、それは本質的_Nzの治療である
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

OK(... [ShiftFilter]) = "" _をワイルドカードとして使用しますか? – Chaosbydesign

+0

ワイルドカードの意味を正確に理解できません。それは単なる代替条件です。 '((qryShiftRoste .... = ..... ftFilter))'が真の場合、OR 'Nz([Forms]![frmNavMain]![NavigationSubform]![ShiftFilter])=" ")'は真です。 –

0

あなたのコンボボックスが空でない場合にだけ、SQLの 'WHERE'部分を追加しないのはなぜですか?

1

あなたはこのように条件を使用しようとすることができます:あなたは、コンボボックスが空であるかどうかを確認するOR句を追加することができます

qryShiftRosterSubShift.CurrentShift = [Forms]![frmNavMain]![NavigationSubform]![ShiftFilter] 
OR Len(Nz([Forms]![frmNavMain]![NavigationSubform]![ShiftFilter],""))= 0 
関連する問題