- ベストアンサー
アクセス2010でクエリの対象をフォーム内データに限定する方法について
- 初心者がアクセス2010でクエリの対象をフォーム内データに限定する方法を学びたいです。
- メインフォームとサブフォームを連結したクエリの結果を出すために、シンプルな方法を教えてください。
- マクロやVBAには未経験ですが、正しい表現や重複している部分についても指摘していただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1です。テーブルの実際のデータは Aテーブル ID 名前 A住所 1 田中 東京 2 佐藤 大阪 3 前田 京都 ・ ・ ・ Bテーブル ID B住所 1 新宿区 1 港区 2 阿倍野 2 河内長野 3 左京区 3 右京区 ・ ・ ・ のようになっており、メインフォームとサブフォームは IDでリンクされているものとしています。 なお、テーブルのリレーションシップは 設定していません。 メインフォームとサブフォームはIDなどで リンクされているものと思いますが、 メインフォームとサブフォームのリンクは、 メインフォームでサブフォームを表示している コントロールのプロパティを表示すれば、 「リンク子フィールド」と「リンク親フィールド」 が「ID」になっているはずです。
その他の回答 (2)
- chayamati
- ベストアンサー率41% (260/624)
一般にメインフォームとサブフォームある場合 それぞれのフォームにテーブルが必要で、今回の場合 A住所のテーブルがA住所のフォームに B住所のテーブルがB住所のフォームに 次に両テーブルに関連付の項目(A住所のIDとA住所ID)が必要です テーブルの構造例 A住所 ID(主キー オートナンバー) 住所 B住所 ID(主キー オートナンバー) 住所 A住所ID(長整数型) テーブルの連結をリレーションシップと呼びデーターベーステーブル内のリレーションシップで定義します ※テーブル設計でID以外の項目を定義するとIDは自動で定義してくれます 追伸 IDをオートナンバーにするとCPで管理されますのでフォーム、クエr-から除去してもOKです
お礼
chayamatiさま、ご回答真に有難うございました。 以前もお世話になったことがあるのですが、その時も親身になっていただきました。 IDを中心にして、限定して考えてみたいと思いました。 真に有難うございました。今後も何かあればよろしくお願い申し上げます。
- piroin654
- ベストアンサー率75% (692/917)
テーブルの構造がどのようになっているか わかりませんが、たとえば テーブルA ID オートナンバー(主キー) 名前 テキスト型 A住所 テキスト型 テーブルB ID 数値型 B住所 テキスト型 のようになっているとします。 そうすると、質問の B1住所+A住所 B2住所+A住所 B3住所+A住所 ・ ・ というのは、たとえば、 新宿区東京 港区東京 ・ ・ 阿倍野大阪 河内長野大阪 ・ ・ のようになっているものだろうと思います。 そうすると、質問のように住所をくっつけた ものを「合成」という名前にすると、クエリでは、 フィールド 合成: [B住所] & [A住所] テーブル 並べ替え 表示 チェック 抽出条件 のように、なると思います。クエリのSQL文を表示すると、 SELECT [B住所] & [A住所] AS 合成 FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.ID = Bテーブル.ID; そこで、質問の >クエリの対象をフォーム内のものに限定する方法 とは、たとえば、メインフォームに「東京」と 表示されていれば、サブフォームには「東京」に 関連した「新宿区」、「港区」などが表示されいる ので、これを作成したクエリで「東京」に関連した データのみを表示したい、ということであれば、 フィールド 合成: [B住所] & [A住所] A住所 テーブル Aテーブル 並べ替え 表示 チェック チェックなし 抽出条件 [Forms]![メインフォーム名]![A住所] のように、作成したクエリの新しいフィールドに 「Aテーブル」の「A住所」を表示し、抽出条件に [Forms]![メインフォーム]![A住所] と入れ、 表示のチェックをはずしておきます。SQL文では、 SELECT [B住所] & [A住所] AS 合成 FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.ID = Bテーブル.ID WHERE (((Aテーブル.A住所)=[Forms]![メインフォーム名]![A住所])); のようになると思います。 そして、フォームのコマンドボタンクリック時のイベントで、 Private Sub コマンド0_Click() DoCmd.OpenQuery "クエリの名前" End Sub とすれば、望みのデータがクエリに表示されると、思います。
お礼
詳細なご回答を二度にわたり、有難うございました。 正直、現在の理解度ではスムーズに対処できないのですが、 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 「Aテーブル」の「A住所」を表示し、抽出条件に [Forms]![メインフォーム]![A住所] と入れ、 表示のチェックをはずしておきます。SQL文では、 SELECT [B住所] & [A住所] AS 合成 FROM Aテーブル INNER JOIN Bテーブル ON Aテーブル.ID = Bテーブル.ID WHERE (((Aテーブル.A住所)=[Forms]![メインフォーム名]![A住所])); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> のあたりを中心に調べて勉強しながら、作業していきたいと思います。 真にありがたかったです。また何かありましたらよろしくお願いします。
お礼
一番最初と、複数回のご回答いただきまして、真に有難うございました。 ベストアンサー送らせていただきたいと思います。