Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(その他 : Access 2021)
クエリ内でフォームの値を参照すると、そのクエリを参照しているクエリがエラーになる
投稿日時: 25/04/08 16:59:48
投稿者: 滝沢

選択クエリAのフィールドBの抽出条件は下記のようになっています。
Between "202501" And "202503"
または
Between [forms].[f_000].[txt_年月1] And [forms].[f_000].[txt_年月2]
 
どちらでも正しい結果が表示されます。
上記テキストボックスの値はそれぞれ「202501」「202503」なので、
ここまではおかしいところはありません。
 
この選択クエリAを参照しているクロス集計クエリCがあります。
このクエリは、クエリAの抽出条件Bが
「Between "202501" And "202503"」だと正常に結果が表示されますが、
「Between [forms].[f_000].[txt_年月1] And [forms].[f_000].[txt_年月2]」だと
 
「[forms].[f_000].[txt_年月1] を有効なフィールド名、または式として認識できません」
というエラーになってしまいます。
不思議です。
ちなみにクエリCでは、フィールドBが列見出しです。
 
抽出条件は毎月変わるのでフォーム上に入力する形式で運用したいです。
原因や回避策などありますでしょうか?

回答
投稿日時: 25/04/08 17:31:30
投稿者: Suzu

Accessのクエリの仕様です。
 
パラメータをもつクエリをソースとする集計クエリ(クロス集計含)は
そのソースのクエリが必要とするパラメーターのデータ型が明示的に与えられていないとエラーになります。
 
 
例えば。
Query1:SELECT * FROM Table1 WHERE [Forms]![フォーム名]![コントロール名]
Query2:SELECT * FROM Query1
これは、エラーになりません。
 
これが、今回の様にクエリ2が クロス集計クエリになるとクエリ2はエラーとなります。
Query1:SELECT * FROM Table1 WHERE [Forms]![フォーム名]![コントロール名]
Query2:TRANSFORM Sum(***) SELECT xxxxxxx FROM Query1 GROUP BY ~~~
 
対策:パラメータのデータ型を明示
 
パラメータクエリを作成する
https://www.moug.net/tech/acopr/0040008.html
 
パラメータクエリのパラメータのデータ型を指定する
https://www.moug.net/tech/acopr/0040009.html
 
 
GUIが古いですね・・
 
最近であればこっちかな。
 
Query に任意の値をパラメータで渡す
https://www.soft-dev.jp/kowaza/kowaza07.html
 
これらを、Query1 Query2 共に実行します。
 
Query1:PARAMETERS [Forms]![フォーム名]![コントロール名] LONG;
             SELECT * FROM Table1 WHERE [Forms]![フォーム名]![コントロール名];
 
Query2:PARAMETERS [Forms]![フォーム名]![コントロール名] LONG;
            TRANSFORM Sum(***) SELECT xxxxxxx FROM Query1 GROUP BY ~~~
 
 
Query2 では、パラメーター [Forms]![フォーム名]![コントロール名] は使用していません。
しかしながら、Query2 の レコードソースとなっている Query1 で 必要となっているパラメーターは
Query2 でも 宣言しないと、今回の様なクロス集計ではエラーとなります。

トピックに返信