Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2007)
クロス集計クエリフォームから特定のクエリを開く方法
投稿日時: 18/05/30 08:21:56
投稿者: ゴマゴマ

お世話になります。
クロス集計を基に作成したフォームの特定のテキストボックスをクリック時に該当のクエリが開くように設定したいと思っています。現在下記のフォーム、クエリ、クエリデザインの設定になっています。
 
現状のやり方だと0,1,2用としてクエリを3つ作らなければなりません。しかしその後のフォーム作成まで考えるとクエリの数を増やしたくありません。出来ればクエリは一つにしたいです。フォーム1で6/1のリンゴの数量2をクリックしたら該当のクエリが、5/30のぶどうの数量1をクリックしたら該当のクエリが開くようにするにはクエリの抽出条件をどのように設定したらよいか教えてください。宜しくお願いいたします。
                

	@フォーム1				
		納期:	5/30		
		 0	 1	 2	←クロス集計クエリのPIVOTで設定
	品名	5/30	5/31	6/1	←テキストボックスで納期(5/30)に+0,+1,+2することで計算
	リンゴ	0	2	2	←数量
	みかん	1	0	2	
	ぶどう	1	1	2	
					
	A5/31 リンゴのクエリ				
	品名	数量	納期	受注番号	
	リンゴ	1	5/31	001	
	リンゴ	1	5/31	002					
					
	Bクエリ 納期の抽出条件に1を設定したデザイン				
	品名	    数量	納期	  受注番号	
抽出条件[フォーム1]![品名]	  [フォーム1]![1]		
					

回答
投稿日時: 18/05/30 09:17:55
投稿者: sk

引用:
クロス集計を基に作成したフォームの特定のテキストボックスを
クリック時に該当のクエリが開くように設定したいと思っています。

引用:
現状のやり方だと0,1,2用としてクエリを3つ作らなければなりません。
しかしその後のフォーム作成まで考えるとクエリの数を増やしたくありません。
出来ればクエリは一つにしたいです。

その選択クエリをデータシートビューで開くことと、
その選択クエリをレコードソースとする帳票フォームを開くことの
どちらを最終目標とされているのでしょうか。

投稿日時: 18/05/30 09:35:06
投稿者: ゴマゴマ

sk様
 
ご回答ありがとうございます。
最終目標は「その選択クエリをレコードソースとする帳票フォームを開くこと」です。
 
宜しくお願いします。

回答
投稿日時: 18/05/30 10:17:57
投稿者: sk

引用:
最終目標は「その選択クエリをレコードソースとする帳票フォームを開くこと」です。

ならば、帳票フォームのレコードソースであるクエリに
抽出条件を設けるのではなく、その帳票フォームを開く命令
(マクロなら[フォームを開く]アクション、
 VBA なら DoCmd.OpenForm メソッド)を実行する際に
抽出条件式を指定するようになさればよいでしょう。
 
その際の抽出条件式は、クリックされたテキストボックスごとに
[納期]に対する条件を変えておけば充分かと。
 
引用:
	Bクエリ 納期の抽出条件に1を設定したデザイン				
	品名	    数量	納期	  受注番号	
抽出条件[フォーム1]![品名]	  [フォーム1]![1]	

例えば、連結テキストボックス[数量1]の[クリック時]イベントで
[フォームを開く]アクションによって帳票フォームを開く際に
「フィールド[納期]の値がテキストボックス[納期1]の値に等しい」
という And 条件を加えたい場合は、[Where 条件式]オプションに
以下のような式を設定すればよいはず。
 
----------------------------------------------------------------------
 
="[品名]='" & [品名] & "' And [納期]=#" & [納期1] & "#"
 
----------------------------------------------------------------------

回答
投稿日時: 18/05/30 10:31:46
投稿者: Suzu

納期の抽出条件も、

引用:
納期(5/30)に+0,+1,+2
と同じ考え方で良いですよね?
 
とした時に、どのコントロールをクリックしたのかを判定する必要があります。
それが判れば、+「x」の xの値を決める事が可能です。
 
手元Accessが無く確認できないのですが、
 
テストとして、
 
新規マクロを作成し
 
メッセージボックス
 メッセージに、 Screen.ActiveControl.Name
 
を設定してみてください。
 
マクロをコントロールのクリック時に設定し、クリックしたコントロール名が取得できれば成功です。
 
フォーカスのあるコントロールが特定できれば、
引用:
それが判れば、+「x」の xの値を決める事が可能です。

を、数式化してしまえるので、
選択するコントロールの数だけマクロを用意する必要が無くなりますよね。
(コントロール名の名前に規則性を持たせて、0/1/2を Mid関数等で取り出し、
 計算結果をテキストボックスに代入)
 
失敗したなら、
1. フォーム上に、非表示にした テキストボックスにを用意。
2. コントロール(列)の分だけマクロを用意し、『納期(5/30)に+0,+1,+2』の結果を
   非表示のテキストボックスに代入。
3. クエリの抽出条件では、非表示にしたテキストボックスを参照する様にする

投稿日時: 18/05/31 07:10:44
投稿者: ゴマゴマ

sk様
Suzu様
 
お世話様です。
早速にご回答ありがとうございました。
 
お二人にそれぞれのご提案いただきましたが今回はSuzu様の案で進めたいと思います。今回どちらも初めて知る方法でしたので新たな技のレパートリーが増え大変感謝しております。
 
引き続きよろしくお願いいたします。