2012-04-16 8 views
0

フォームのコンボボックスに数値を返すコンボボックスがありますが、これはクエリのフィールドの条件としてこの数値を使用していますが、オプションがない場合コンボボックスが選択されているが、私はデフォルトの基準を使用したいが、アクセスは無効な構文を持っていることを伝え続けている。誰かが私にこれをどうやってできるか教えてもらえますか?アクセスのクエリ内の "iif"で不等式を使用する方法

IIf(IsNull([Forms]![frm_a]![cmbo_b]),<2 or >3,[Forms]![frm_a]![cmbo_b])

私はIF文の途中で<2 or >3を使用するときに問題が発生します。

+0

あなたが参照するデフォルトの基準は何ですか? –

答えて

1

あなたの問題は2つの部分です。まず第一に、ここであなたは、彼らがどのように機能するかを理解するための疑似IIFステートメントがあります:

:これを説明する

IIF(IsNull(SomeFieldOrControl),ConditionIsTrueSoDoThis,ConditionIsFalseSoDoThis) 

もう一つの方法は、cmbo_bがnullの場合、我々は長さゼロの文字列を表示します。この例であります

cbmo_bがnullの場合、これは長さゼロの文字列を表示します:

IIF(IsNull([Forms]![frm_a]![cmbo_b]),"",[Forms]![frm_a]![cmbo_b]) 

私はあなたがのNz(ゼロにヌル)関数にあなたのIsNull関数を切り替える必要があると思います。

2つ目の部分については、通常、2つの部分条件を評価するときに、括弧で囲む必要があります。私は本当にこれは動作するとは思わないが、それは一度に2つの異なる可能性を評価しようとしていると主張するならば、私が考えることができる唯一のものだ。条件がtrueと評価された場合は、これを0に設定しました。 IIF関数を正しく使用していなかったので、ステートメントが真であれば表示する内容は本当にわかりません。

IIF(Nz([Forms]![frm_a]![cmbo_b],0)(<2 or >3),0,[Forms]![frm_a]![cmbo_b]) 

私はそれが方法についてラウンドであなたが評価しているものを明らかにあるので、あなただけの条件が= 3かどうかをチェックしないと、なぜ疑問に残っています。条件が真であることが判明した場合、あなたのコードは、任意の手掛かり与えるものではありませんので、私はまだわからないんだけど、何を表示する:最後の単語については

IIF(Nz([Forms]![frm_a]![cmbo_b],0)=3,0,[Forms]![frm_a]![cmbo_b]) 

を、これは個人的な好みの問題かもしれませんが、私はそれを回避する方法がない限り、他のフォームのコントロールを参照することから離れようとします。このようなコードは、フォームやコントロールの名前を変更したり、単にフォームをサブフォームにすると、コードが失敗したりエラーになったりする可能性があるため、非常に脆弱になりがちです。完全に間違っているわけではありません。読みやすく、保守しやすいコードを固執しようとしています。

私は頻繁に行うのですがフォームまたはサブフォーム上のパブリック関数を作成し、このようなステートメントを使用してそれらを呼び出すです:一度

Call Forms("frm_a").MyPublicFunctionName() 

または

Call Me.Parent.MyPublicFunctionName() 'Call function on main form from subform 

または

Call Me.subform1.Form.MyPublicFunctionName() 'Call function on subform 

再び、私はこれがちょうど個人的な好みの問題かもしれないと思う。このようなパブリック関数は、MyPublicFunctionName内でエラーが発生した場合、コードは上記の行で停止し、どの行が実際に問題を引き起こしているか分からないため、デバッグは困難です。

関連する問題