Accessのクエリでフィールド名を追加

このQ&Aのポイント
  • Accessのクエリでテーブルにフィールド名を追加する方法について教えてください。
  • グループCさんにチェックを入れ、コンボボックスでグループが666かつチェックが付いているデータのみ表示する方法を教えてください。
  • テーブル1がマスタなので変更できないため、クエリを使用して条件に合致するデータを抽出する方法を教えてください。
回答を見る
  • ベストアンサー

Accessのクエリでフィールド名を追加

Accessでマスタのテーブル1があります。 その中には ID   名前  グループ 1   Aさん   555 2   Bさん   555 3   Cさん   666 4   Dさん   666 IDはオートナンバーで主キーにしています。 ただ単純に上記のテーブル1に下記のようにチェックボックスを追加したいと思っています。 ID   名前  グループ  チェック 1   Aさん   555      □ 2   Bさん   555      □ 3   Cさん   666      □ 4   Dさん   666      □ チェックはYES/NO型 仕様としてテーブル1がマスタなので変更できない事が条件。 本題ですが、上記の状態でグループCさんにチェックを入れ、コンボボックスでグループが666 and チェックが付いているデータのみ表示するように出来ないでしょうか? クエリで簡単に出来ると思ったのですが、チェックを追加するところでつまづいています・・・。 クエリの抽出条件でグループを666にし、グループの絞込みは出来ると思うのですが・・・。 わかりにくいかと思いますが、よろしくお願いします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

まず、ご質問文中の > 仕様としてテーブル1がマスタなので変更できない事が条件。 についての確認になりますが、『変更できない』というのは  1)「フィールドの追加」が不可  2)「ID/名前/グループ」は編集不可で、チェックボックスのみ   編集可能にしたい(フィールドの追加は可)  3)改めて考えてみたら両方必要かも のどれになるか、で、対処法も変わります。 一応、上記の想定で、それぞれを説明してみます。 【フィールドの追加が不可の場合】 それぞれのレコードに対してチェックのオン/オフを個別に指定する ためには「フィールド」は必須となりますので、チェックボックス用の テーブルを新規作成して対応することになります。 このとき、それぞれのチェックがどのレコードに対しての指定なのか を判別できるようにするために、主キーの「ID」も追加します。 <新規テーブル「テーブル2」の構成>  フィールド: ID(長整数型・主キー)、チェック(Yes/No型)  ※IDは「テーブル1」のIDに合わせて任意の値を記録する必要   があるため、オートナンバーにはしません。 あとは、  a)テーブル1に既存の全IDを、テーブル2に登録するための   「追加クエリ」  b)テーブル1とテーブル2を元に「ID/名前/グループ/チェック」を   表示する「選択クエリ」 を作成してやれば、ご希望の動作をさせることができます。 (「a」の追加クエリを実行後、「b」の選択クエリ(またはそれを  元にしたフォーム)を開き、チェックを更新&検索を実行、と) ※選択クエリ/追加クエリの作成方法はご存知と推測して省略   しましたが、必要であれば補足します。 【ID/名前/グループ/チェックのうちチェックのみ更新可にする場合】 テーブル1に「チェック」の追加がOkなら、まずはそれを追加します。 NGの場合は、上記のようにして新規のテーブルとクエリを作成します。 <更新や検索をフォーム上のみで行う場合>  上記のテーブル/クエリを元にしてフォームを作成したら、そのデザイン  ビューで、「ID/名前/グループ」の各データを表示するコントロールの  『編集ロック』プロパティを「はい」に設定してやればOkです。  (『編集ロック』プロパティは、各コントロールのプロパティシートの   『データ』タブにあります)  ※「チェック」の『編集ロック』は既定の「いいえ」のままです。   なお、『使用可能』プロパティは、すべて既定の「はい」にします。 <テーブル/クエリ上でも更新や検索を行う場合>  テーブルについては、残念ながら編集を制限する方法はありません(汗)  ただ、クエリを使えば制限は可能なので、「テーブルは直接開かない」  という運用ルールを設定した上で、「テーブル上のすべてのレコードを  表示するクエリ」を作成し、そちらで編集を行う形にすれば、対処は  可能になります。  編集を制限するためには、通常、クエリのデザインビューで行っている  フィールドの指定方法を、変更してやります。 [通常の指定方法]  <クエリのデザインビュー>   フィールド: ID   テーブル:  テーブル1   並べ替え:   表示:    □ [編集を制限したい場合の指定方法]  <クエリのデザインビュー>   フィールド: =[テーブル1].[ID]   テーブル:    並べ替え:   表示:    □ 上側のように、フィールド自体を直接指定するのではなく、 下側のように、先頭に「=」をつけた「式」として指定してやると、 編集を制限できます。 (関数の演算結果は手入力では編集できないため) ですので、編集を制限したい「ID/名前/グループ」には「=」を つけて、編集を許可したい「チェック」については通常通りで、 それぞれクエリのフィールドとして追加してやれば、ご希望の 動作になるかと思います。 (「=」をつけたフィールドに対しても、通常と同様に抽出条件は  指定できます) ・・・長くなりましたが、以上です。

wisteria999
質問者

お礼

お礼が大変遅くなってしまい申し訳ありません。 連絡が失念してしまいました。 上記方法で何とか解決できる事が出来ました。 細かく教えていただいたお掛けです。 システムもかなり複雑で苦労しましたが解決でき、 感謝しています。ありがとうございました。

その他の回答 (4)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.5

クエリの段階でチェックの内容を保持したいとなると、 テーブルが必要になると思います。 テーブル2 として、「ID」「チェック」を作ります。 「ID」は、数値型(長整数)主キー 「チェック」は、Yes/No型 チェックを入れる/外す段階では、一覧表示が必要と思うので、 クエリを作成します(SQLビュー表示にて) SELECT T1.ID, T1.名前, T1.グループ, T2.チェック FROM テーブル1 AS T1 LEFT JOIN テーブル2 AS T2 ON T1.ID=T2.ID; これで一覧が表示されます。 新しくチェックを入れると、その部分だけがテーブル2 に追加されていきます。 追加された後、チェックを外してもそのレコードは残ります。 これらを元に、コンボボックスに以下を設定します。 SELECT ID, 名前, グループ FROM テーブル1 WHERE (ID In (SELECT ID FROM テーブル2 WHERE チェック = True)) AND (グループ=666); ※ グループが数値型だった場合の例(グループが 666 でチェックがあるもの) クエリの段階ではなく、フォーム上で良ければ、 テーブルの追加が不要な実現方法もあると思います。 また、各フィールドの編集可/不可等簡単に設定できると思います。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No1とNo3です。 No1の テーブル1-1 は、 >テーブル1を別名で作成するか、あるいはテーブル1のIDを持つ >テーブルを作成するかして、 のテーブル名です。少し説明が抜けていました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No1です。 >(フィールドそのものを追加することができない)。 について説明を加えておきます。 たとえば、テーブルの既存のフィールドから得られる データを基にした新しいフィールドの追加は可能です。 たとえば、フィールドに「単価」、「数量」とあれば、 クエリのフィールドに、 合計:単価*数量 とすれば合計のフィールドを表示することができます。 しかしながら、クエリはテーブルのデータを表示 する機能しかないので新たなデータを保持する 機能はないのです。これが、No1の >(フィールドそのものを追加することができない)。 の意味です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

クエリにYes/No型のフィールドを追加することは できません。(フィールドそのものを追加することができない)。 もし、質問全体のことをしようと思えば、テーブル1 を別名で作成するか、あるいはテーブル1のIDを持つ テーブルを作成するかして、そのフィールドにYes/No型の フィールドを追加して、 SELECT [テーブル1-1].ID, テーブル1.名前, テーブル1.グループ, [テーブル1-1].チェック FROM テーブル1 INNER JOIN [テーブル1-1] ON テーブル1.ID = [テーブル1-1].ID WHERE ((([テーブル1-1].チェック)=True)); のようなクエリを作成し、操作はテーブル1-1を操作し、 その結果を上記のクエリで表示する、という方法に なります。 システム全体がわからないのでこのようなところですが、 システムによってはテーブルの作成や表示方法に 工夫ができるところがあるかもしれません。

関連するQ&A

  • Accessクエリでのグループ化

    Accessクエリでのグループ化 以下の2つのテーブルが有ります。 ■社員テーブル ID 名前 1 Aさん 2 Bさん 3 Cさん 4 Dさん 5 Eさん ■受付テーブル ID 受付内容 受付日   社員ID 1  xxxxx 2010/3/1   1 2 xxxxx 2010/3/20   3 3 xxxxx 2010/4/10   2 4 xxxxx   2010/4/11  5 5 xxxxx 2010/4/15  1 6 xxxxx 2010/4/30  2 7 xxxxx 2010/5/3  4 そこで社員毎の受付数をカウントしたいと思っています。 ※受付日が2010/4/1以上5/1未満 名前 受付回数 Aさん 1 Bさん 2 Cさん 0 Dさん 0 Eさん 1 となるイメージです。 しかし、実際にクエリを作ると結果が 名前 受付回数 Aさん 1 Bさん 2 Eさん 1 と、なってしまいます。。 名前:グループ化 受付テーブルのID:カウント 受付日:>=2010/04/01 and <2010/05/01 ※社員テーブルの『ID』と、受付テーブルの『社員ID』を  紐つけており、結合プロパティでは『社員テーブルの  全レコードと受付テーブルの同じ結合フィールドのレコード  だけを含める』としております。 あらかじめ、受付テーブルで受付期間の条件でクエリ を作成しておき、それと社員テーブルを紐つけた場合は イメージ通りの結果になるのですが、1つのクエリで 上記イメージでの結果を表示したいと思ってます。 可能でしょうか? ご教授願います。

  • アクセスの追加クエリについて

    二つのテーブル間(AとB)を追加クエリを使い AからレコードをBに追加することは出来たんですが、 逆にBからAにレコードを追加しようと選択クエリを追加クエリに変更しようとしたんですが、ウィザードの追加先テーブル名にAのテーブル名が表れないですがその理由が全く分からないので分かる方教えていただけませんか? AとBのレコード内のフィールドは同じです。 AからBにレコードを移行する処理としてマクロを使いアクションとして ・クエリを開く(これは追加クエリです) ・SQLの実行(上と同じクエリを削除クエリに変更し、そのSQL文をSOLステートメントに貼り付けました) 上の処理は問題なく出来たので逆のBからAへレコード移行処理のマクロを作ろうとしたのですが、追加クエリの追加先テーブルにテーブルAの名前が出てこないので困っています。こういったAからB。BからAという処理は追加クエリで出来ないのでしょうか?

  • アクセス追加クエリで限定したい

    環境は WinXP SP3 ACCESS2003です。 次のように追加クエリでテーブルにデータを追加していますが A B C D 1 545 5555 456 1 444 5485 698 2 584 6985 524 2 526 7898 214 3 548 5455 555 この次に 1 545 5555 456 と同じデータが追加されたとき 追加できないようにしたいのですが うまくいきません Aの追加条件に<>"A" 指定とか 主キーの設定はだめですし どちらさまか ご指導ください

  • ACCESSの追加クエリーについて

    お世話になっております。 以下の点について教えてください。 1.対象データー例 月度 商品 単価 2009/07 A 1 2009/07 B 1.5 2009/07 C 2 2.追加クエリーで実行したい内容 上記データを8月度にも使用したいことから、月度を2009/08に変更後 追加クエリーを実行し(2009/07のデータは残したい)、テーブルに追加 したい。 3.お願い 上記No.2の方法を教えてください。 よろしくお願いします。

  • access クエリーによるフィールド挿入について

    クエリーにて、抽出処理をしますが、その中で、設定されていないフィールドを故意に挿入追加することはできますか?  例  「メモ」 欄は、いずれの対象テーブル、クエリーになく、    クエリー操作により、A B C メモ D という 結果を作成したい。    ※A~Dは、いずれかのテーブル、クエリーに設定されている。   ちなみに、メモ については、当然空白のみであり、入力プロパティはなんでもいいです。 ちなみに、access 2003が対象です。

  • Accessクエリにて

    お世話になります。 下記テーブルがあります。 ■型番テーブル ID 型番 数量 1  A   1 2  B   1 3  C   1 4  D   1 5  E   1 ■発売日テーブル ID 型番 発売日    削除 1  A   2010/01/01 False 2  B   2010/05/01 False 3  C   2011/03/01 False 4  D   2011/05/01 True 5  E   2011/06/01 False ■上記テーブルを用いたクエリ ・型番テーブルの「型番」と発売日テーブルの「型番」を  紐付ける ・表示したいフィールドは「型番」「発売日」。 ・表示したいのは型番テーブル全件(5レコード)。 ・発売日テーブルの削除がTrueの場合、発売日を空白とする。 *************** ここで質問です。 型番テーブルの全件を表示したいところですが、条件として発売日テーブルの 削除がFalseである為、型番Dが表示されません。 発売日テーブルであらかじめ削除がFalseのみでクエリを作成し、そのクエリと 型番テーブルの「型番」で紐付ければ全件表示されることは分かっており ますが、1つのクエリで表示する方法をご教授頂ければと思います。 宜しくお願い致します。

  • ACCESS2007 クエリの抽出条件について教えてください

    ACCESS2007で、ルックアップ列(コンボボックス)を使用したテーブルがあります。そのテーブルをクエリにて、コンボボックスの条件別に抽出させたいのですが、その抽出条件を教えていただけませんでしょうか。 コンボボックスリストの中身(A,B,C)       A→Aのみ抽出したクエリ       B→Bのみ抽出したクエリ       C→Cのみ抽出したクエリ という風に作成したいのですが。 お忙しいところ申し訳ありません。よろしくお願いします。

  • access2000 クエリーについて

    access2000を使っています。 クエリーの抽出条件をいちいちデザインビューで入れるのが面倒です。 クエリーを開く時に抽出条件を聞いてくれるようにしたり、フォームのリストボックスをクリックするとその条件のクエリーが出てくるように出来ないでしょうか? 例を挙げておきますと、テーブル(生徒テーブル:(1)生徒ID(2)生徒名(3)Tel(4)クラス クラステーブル:(1)クラスID(2)クラス名(3)担当者)で生徒テーブルの(4)クラスとクラステーブルがリンクしてあります。 それで、あるクラスの生徒を出したいのです。いかがでしょう。

  • ACCESS 同じデータの一括追加。

    商品テーブル:商品_売上_個別ID マスタテーブル_グループID_個別ID_住所・・・ 上記のような商品テーブルがあるのですが、同じグループIDのデータに 同じ商品_売上を入れるにはどのようにするのが一番良いでしょうか? フォームで非連結のボックスを作って、一通りの商品名、売上を入力 グループID入力用のボックスにグループID入力。実行 のようなものが作りたいのですが出来ないでしょうか?

  • Accessクエリのフィールドについて

    クエリの作成で、2つのテーブルからフィールドに追加する時ですが、 会員IDなど 一側にも多側にも両方ある場合、解説書などを見ると、 「必ず、多側テーブルのフィールド(主キー設定されていない方のフィールド)を追加するように」と書かれているのですが、その理由がわかりません。 どちらからとっても結果は同じように思うのですが。。。ご存知の方いらっしゃったらよろしくお願いいたします。

専門家に質問してみよう