アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access where条件式について
最近マクロでwhere条件式による抽出を知った初心者です。

現在単ページ表示のフォームから、表示されているID番号のレポートを表示させたいと考えているのですが、そのレポートをレコードソースになるマスターテーブルから
[Form]![ID]=[マスターテーブル]![ID]
とすると該当するレポートが表示されるのですが、
レポートのレコードソースをクエリに変更
[Form]![ID]=[マスターテーブルクエリ]![ID]
に変更するとすべて空で表示されてしまいます。
クエリを使用することは出来ないのでしょうか?

データベースの基礎があやふやなこと、where条件を最近知ったことなどから、検討違いなことを質問していたら申し訳ありません。
また質問に対して、足りない情報があればご指摘願います。

OS Windows XP
Access 2003

A 回答 (2件)

二つのテーブルに同じ名前のフィールドがある場合は


テーブル名で修飾して、どちらのものかを明示的に
指定します。下記参照

テーブルB.ID=~ AND テーブルC.フィールドD=~

最初の質問で[テーブル]![ID]となっていたのと同じ
ですが、!はAccess独特の表記で、他のDBシステムでは
ピリオドになります。[]はテーブル名やフィールド名に
予約語や空白などが含まれている場合に、その効果を
打ち消すために使います。今回の例のような場合には
予約語や特殊記号のない名前なので[]は不要です。また、
フィールド名が一意であれば修飾の必要はありません。
    • good
    • 0

WHERE句の条件式は現実にあるオブジェクト名を


使わなければなりません。
「マスターテーブル」というテーブルに「ID」と言う
フィールドがある以上、レコードソースがクエリに
代わっても、各オブジェクト(テーブルやフィールド)
の名前は変わらないので、元のままの名前を使います。
クエリ内でエイリアス(別名)を定義した場合は別名を
使います。以下はその例です。

SELECT ID As RepoId FROM マスターテーブル As Master

上記SQLを持つクエリをXXXとします。IDはReportId、
マスターテーブルはMasterという別名になっています。
条件式は下記の様に変わります。

[Form]![ID]=[Master]![ReportId]

つまり、クエリ名は出てきません。エイリアスを定義
していないなら、名前は元のままです。

この回答への補足

そうなんですね。
ご回答ありがとうございます。
それでは例えば複数のテーブルからデータを取り出したクエリをレコードソースにしたレポートをwhere条件で指定したい場合などはどうしたら良いのでしょうか?

例えばレポートAはテーブルBとテーブルCからデータを取り出したクエリXがあります。
テーブルBとテーブルCは互いにサブIDでリレーションの関係にあり、クエリでテーブルBのIDとテーブルCのフィールドDを表示するとしたら、このクエリXをwhere条件でID指定する場合、どのように記述したら
よろしいのでしょうか?

補足日時:2010/10/13 23:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています