みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access計算式のフィールドの指定方法

Accessの問題集を解いてみているのですが、レポートの中で
計算式を作ってレポートビューにすると、
意図しないパラメータの入力画面が出てしまいます。
解答は書いてあるので、確かにそのようになるのは確認できたので
すが、解説がなく何故そうなるのかご教授いただけないでしょうか。

<テーブル>
「取引先台帳」 フィールドにYes/No型の[会員]ほか
          [取引先コード][取引先名]など
「受注台帳」  [受注No][取引先コード][商品名][単価][個数]ほか

<クエリ>
「受注一覧」 上記2つのテーブルを利用して作成
        金額:[単価]*[個数] フィールドあり

<レポート>
上記クエリを利用して作成
[取引先コード]でグループ化
[金額]フィールドをSum関数で合計し[subtotal]フィールドとして設定
[会員]フィールドはレポート上に入れていない

このレポートの中で[会員]がONの取引先(コード)には、会員割引金額を表示する
ため、IIF関数を使用し
=IIf([会員],[subtotal]*0.05,0) とするとあります。
計算式をいつも式ビルダで作成している場合、[会員]フィールドが現在作成中の
フィールド一覧にないため、基となるテーブルから[会員]フィールドを引っぱっ
てきたら以下のように作成されます。
=IIf([取引先台帳]![会員],[subtotal]*0.05,0)
で、これをレポートビューで表示すると、
「パラメータの入力」ダイアログボックスで「取引先台帳」とメッセージが
なっているものが表示されます。何も入力せず「OK」をしても正しく計算できてません。
[取引先台帳]!を削除すれば、解答と同じになるため正しく計算してくれます。

クエリなどの計算式ではテーブル名が入っていても、正しく計算してくれるようでしたが、
この場合は、何故パラメータの入力メッセージが出てしまうのでしょうか。

長文になりましたが、よろしくお願いします。
情報が足りなければ、追加します。

投稿日時 - 2012-05-20 16:52:45

QNo.7486322

困ってます

質問者が選んだベストアンサー

No.1です。

> [会員]フィールドを表示(デザインビューでチェック入ってます)

こちらこそ、言葉が足りなかったようですみません(汗)

上記のように、クエリのデザインビューで『表示』のチェックをオンにしたものは、
『クエリで定義したフィールド』になります(→No.1の中程の『定義』の意味)。

確かに元になっているのは「『取引先台帳』テーブルのフィールド」ですが、
クエリを通して見ることになるフォームやレポートでは、同フィールドは
「『受注一覧』クエリのフィールド」としてしか扱えなくなります。
・・・という説明が、前回は欠けてしまっていました。


なお、このことは、以下の操作で確認できます:

【確認方法・A】
 1)『受注一覧』クエリのコピーを適当な名前で作成
 2)上記で作成したクエリの『会員』フィールドの左端に「会員名: 」を追加
  (半角コロン「:」が入っているので注意:フィールドへの別名の指定方法)
  →クエリをデータシートビューで開くと、『会員名』として表示されるように
   なります。
 3)同クエリを使用したレポートのコピーを適当な名前で作成
 4)上記で作成したレポートの『レコードソース』を、上記で作成したクエリ
  に変更 
⇒このレポートを開くと、『会員』がパラメータとして要求される。
  (=テーブルの『会員』フィールドが参照できているわけではない、と)

※『名前の自動修正』オプションが有効になっていると面倒なので、コピーで
  確認することをお勧めします。
  (また、順序を変えると、自動修正でレポートのコントロールソースが書き
  換えられ、意図した結果にならなくなる可能性があります)


【確認方法・B】
 レポートのテキストボックスの『コントロールソース』に、『[受注一覧]![会員]』
 と記述
⇒このレポートを開くと、『会員』フィールドの値が正しく表示される。
  (『クエリ内で、元となっているテーブルを参照』しているのと同様に、
  『レポート内で、元となっているクエリを参照』することができている)

<注意>
 ここで指定するのはあくまで上記の式だけです。
 先頭に『=』を入れると、『受注一覧』がパラメータとして要求されます。


・・・以上です。
眠気が増してきたので、すみませんがこの辺で・・・
(支離滅裂になっていないとよいのですが(汗))

投稿日時 - 2012-05-21 23:36:05

お礼

「レコードソース」のヒントをいただき、あれこれ試してみました。
結局、レポートの演算の場合、フィールド名以外にテーブル名やクエリ名を
付加してフィールドを指定したものは、パラメータになってしまうみたいですね。

とりあえず、レポートで演算フィールドを作成する場合は、フィールド名のみ
で計算させるようにしたいと思います。

長々とありがとうございました。

投稿日時 - 2012-05-22 23:49:01

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> この場合は、何故パラメータの入力メッセージが出てしまうのでしょうか。

クエリの場合、単一のテーブルからだけでなく、複数のテーブル(及びクエリ)
から作成することが可能です。
このとき、すべてのフィールドで名前が異なれば問題ありませんが、複数の
テーブル・クエリで同名のフィールドがあると、フィールド名だけではどちらを
参照すればいいかを判断できません。

そのため、クエリの場合は、構成要素となっているテーブル・クエリの名前
での修飾による参照が可能にされている、ということだと思います。
(もしもExcelでのワークシート関数の方がなじみがあるようでしたら、「同じ
 シート内であれば『=A1』で参照できるのに対して、別シートの場合は
 『=Sheet1!A1』」、別ファイルの場合は『='c:\Test.xls'!Sheet1!A1』と、
 所属先を指定する必要が生じるのに近い・・・かもしれません(汗):
 Sheet1が作成しようとしているクエリ、同ブックのSheet2・Sheet3が
 テーブルに相当、といった感じ?(汗))


一方、フォームやレポートの場合、そこに設置したテキストボックスやVBA
から参照できるのは、あくまで「レコードソースに指定したテーブル・クエリ
で定義されているフィールド」(=クエリの場合は、クエリのデザインビューで
『表示』のチェックがオンになっているフィールド)のみ、となります。
これは、レコード・フィールドとも相当数あった場合、必要なフィールドに
限定して読み込むことで、元となっているテーブル・クエリの全フィールド・
全レコードを読み込むよりも動作を軽くするため、と考えられます。

その結果、「レコードソースのクエリ」で表示対象として指定されなかった
情報は隠蔽されてしまうため、『[取引先台帳]![会員]』という式を指定
すると、『取引先台帳』がパラメータ扱いされる、ということです。


※『式ビルダ』は、フォーム・レポートの他、クエリの『抽出条件』欄などから
 も使用可能(→クエリの場合は右クリックメニューから起動)に設計された、
 いわば汎用ツールです。
 このため、本来なら「当該クエリの元となっているテーブル」の場合でのみ
 使用可能な「[テーブル名]![フィールド名]」の形の式が、その形では使用
 不可能なフォームやレポートでまで、選択可能になってしまっているので
 使用する際には注意が必要です。
 (本当なら、使用可能なものだけに制限が掛かってしかるべき、というのは
  ありますが、ある程度Accessになれてくると直接入力した方が早い、
  といったこともあって、そこまでの手は掛けられていないものと推測)



・・・以上、納得のいく説明には程遠いと思いますが(汗)、参考まで。

投稿日時 - 2012-05-20 23:43:58

お礼

早速ご丁寧な解答ありがとうございます。
ただ、私の記述が少し足りなかったようで。

今回のレポートの基になっているクエリ「受注一覧」には、
[会員]フィールドを表示(デザインビューでチェック入ってます)
させています。
ただ、レポート上は作成時に一度すべてのフィールドを入れて作成し、
その後設問の指示で不要なので削除しております。
(作成タブのレポートボタンにより作成)
この場合も、同様に考えればよろしいのでしょうか。

どうやらAccessの仕様辺りが絡んできてるような感じですね。
ありがとうございます。

投稿日時 - 2012-05-21 00:59:49

あなたにオススメの質問