同じフォームの別のコントロール(ctrl1)に基づく選択クエリによって設定されたフォームのリストボックスがあります。それは、CTRL1の更新時にトリガーされます。SELECTの結合がnullを返す場合にのみ、すべてのレコードを返す方法
PARAMETERS [Ctrl1 input] Long;
SELECT table1.column1, table1.column2
FROM (table1 INNER JOIN table2 ON table1.column2 = table2.column1) INNER JOIN table3 ON table2.column2 = table3.column3
WHERE (((table3.column1)=[Ctrl1 input]))
ORDER BY table1.column2;
また、これはtable3.column3
フィールドに値を持っているtable3.column1
の値に一致するフォームパラメータに基づいて動作します。今すぐフォームの選択がtable3.column3
に一致する値を持たない場合、リストボックスは空のままです。この状況では、代わりにすべての結合と制約なしでSELECT table1.column1, table1.column2
の完全なリストを返すことを望みます。
PARAMETERS [Ctrl1 input] Long;
CASE WHEN (SELECT table3.column3 WHERE (table3.column2 = [Ctrl1 Input]) IS NOT NULL)
THEN
SELECT table1.column1, table1.column2
FROM (table1 INNER JOIN table2 ON table1.column2 = table2.column1) INNER JOIN table3 ON table2.column2 = table3.column3
ELSE
SELECT table1.column1, table1.column2
:(。リストが非常に長いので、私はどうしても必要なときだけ、全体のものを使用したい)
SQLでは、これに似たような、case
機能は、私が欲しいものを達成することを表示されます
しかし、Accessクエリでcase
を使用することができません。それもうまくいくよう
IIf
文は
PARAMETERS [Ctrl1 input] Long;
IIf(
(SELECT table3.column3 WHERE (table3.column1 = [Ctrl1 input]) IS NOT NULL),
(SELECT table1.column1, table1.column2 FROM (table1 INNER JOIN table2 ON table1.column2 = table2.column1) INNER JOIN table3 ON table2.column2 = table3.column3),
(SELECT table1.column1, table1.column2)
)
、ようだが、アクセスが、それはSELECT
、INSERT
は、DELETE
は、など。また、SELECT IIf
テスト、私が得る期待すると言って、それを受け入れないだろうそれはただ一つの価値しか返すことができないと言って、それは私のためには役に立たない。
私はVBAでcase
とIIf
の両方を使用してTHATをクエリで使用する記事を見てきましたが、自分の状況をどのように変換するのかを理解するための十分な例は見つかりませんでしたモジュールを呼び出して呼び出します。私はVBAでは動作せず、SQLでほとんど動作しません。 VBAを掘り下げる前に、私は知りたいと思っています:
- 私はVBAで何をしたいのですか?
case
,IIf
、または他のアプローチの引数がありますか?- この関数では、値として何を渡しますか?フォーム上のctrl1からのデータ?
- 返す関数は何ですか、どうすればよいですか?これは機能自体の内部に
myfunction = the code that produces the dataset I need
を設定することによって達成されますか?
私は関数の出力タイプを理解している限り、クエリの関数の使い方を理解していると思います。
洞察と情報をお寄せいただきありがとうございます。
注:私はAccess 2016を使用していますが、ファイル自体は2002-2003形式なので、GISソフトウェアと互換性があるようです。
IIF()は間違った場所や順序で正しく行っています。 ifステートメントは、あなたが選択したWHERE条件では使用されません。しかし、あなたはVBAでもSQLを呼び出す前にそれをテストすることができます。正直なところ、あなたが投稿したコードはあまりにも混乱している/私はそれをもっと解読したいと思っていますが、これはあなたの問題の少なくとも1つです。 – Matt
@Matt私は結果に応じて 'FROM'が変化するもし 'FROM'がその前に起こるならば' IIf'の? 混乱のためのお詫び。私が言ったように、私は言語を知らない。一般的なフィールド名とテーブル名を使用した方が良いでしょうか?各関数の構文を調べると、その例は非常に簡単で、一般的なSQLの手法を知らなくても、書式を調整する方法はわかりません。 – troubbble
正直なところ、おそらく値をテストして、ロジックがあればVBAを使用してクエリ文字列を設定し、目的の文字列を渡すべきです。あなたはSQLでそれを行うことができますが、オプションのテーブルに参加したままにして、条件が満たされているかどうかを判断するために、JOINとWHEREのIF()文を使用します。 – Matt