web-dev-qa-db-ja.com

OR演算子が機能しない)を使用したIIFクエリ

MSAccessクエリの条件として次を実行しようとしています。基本的に私がやりたいことは次のとおりです。

  • チェックボックス= Trueの場合、空白またはNullフィールドを持つレコードを含むすべてのレコードが表示されます(フォームのコンボボックス[combo9]のデフォルト値は「*」です)
  • チェックボックス= Falseの場合、Combo9の値に一致するレコードのみが表示されます

私の現在の式ではエラーは発生しませんが、結果も生成されません。式のTRUEとFALSEの半分はそれ自体で正常に機能しますが、iif式に結合すると機能しません。

Like IIf([Forms]![F_leg_reg]![Check25]=True,Like [Forms]![F_leg_reg]![Combo9] Or "" Or Is Null,Like [Forms]![F_leg_reg]![Combo9])

誰かが私がここで間違っていることを教えてもらえますか?前もって感謝します。

5
Reigncloud

非常に多くのlikesが必要かどうかわからないため、戻り値にor論理演算子を使用していますが意味がありません

IIF (condition, value-if-true, value-if-false)

そう..

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 'foobar')

いずれかの条件が満たされた場合、IIFは「bar」を返します。それ以外の場合は「foobar」を返します。

必要に応じてネストできます

Like IIF ([forms]![foo].[text1] = "1" OR [forms]![foo].[text2] = "1", 'bar', 
        IIF ([forms]![foo].[text1] = "2" AND [forms]![foo].[text2] = "2", 'foobar', null)
    )

いずれかの条件が満たされた場合、IIFは「bar」を返します。それ以外の場合は、text1およびtext2は「2」である場合は「foobar」を返し、そうでない場合はnullを返します。

お役に立てれば

8
T I

私はこの議論に非常に遅れていますが、同じ問題に遭遇したときにこの投稿を見つけました。それ以来、私はそれを解決し、共有したいと思います。

問題は、Iifステートメントの場所です。 Accessを使用しているため、クエリデザインビューの[基準]行にIifステートメントを配置している可能性があります。それを削除します。代わりに、Iifステートメントをクエリ内の独自のフィールドにする必要があります。

また、Nullと「*」で使用する演算子にも十分注意する必要があります。構文は非常に扱いにくいです。

新しいクエリフィールドに、次のように入力します。

IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box])

次に、そのフィールドの基準を<> Falseに設定します。

SQLは次のようになります。

SELECT [Field1], [Field2], etc
FROM Table1
WHERE (IIf([Combo_Box] Is Null,[Field1] Is Null Or [Field1] Like "*",[Field1]=[Combo_Box])<>False);

お役に立てれば!パーティーに遅れてすみません!.

1
likearock83

IIf()式内でキーワードLikeを繰り返しています。それはうまくいきません。 IIf()を修正することもできますが、私は別のアプローチを使用します...これは私の脳によりよく適合します。

これにより、チェックボックスがオンの場合はすべての行が返されますが、チェックボックスがオフの場合は行が返されません。

SELECT a_field, another_field, field_2_search 
FROM YourTable
WHERE [Forms]![F_leg_reg]![Check25]=True;

チェックボックスがオフの場合、行をfield_2_search値にコンボの値が含まれる行に制限します。

SELECT a_field, another_field, field_2_search
FROM YourTable
WHERE
    [Forms]![F_leg_reg]![Check25]=False
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*";

ただし、クエリは2つではなく、1つだけ必要なので、これらのWHERE句をORと組み合わせます。

SELECT a_field, another_field, field_2_search 
FROM YourTable
WHERE
    [Forms]![F_leg_reg]![Check25]=True
    OR (
    [Forms]![F_leg_reg]![Check25]=False
    AND field_2_search Like "*" & [Forms]![F_leg_reg]![Combo9] & "*"
    );
1
HansUp