プロが教える店舗&オフィスのセキュリティ対策術

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にし、グループの絞込みは出来ると思うのですが・・・。
わかりにくいかと思いますが、よろしくお願いします。

A 回答 (5件)

まず、ご質問文中の



> 仕様としてテーブル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/名前/グループ」には「=」を
つけて、編集を許可したい「チェック」については通常通りで、
それぞれクエリのフィールドとして追加してやれば、ご希望の
動作になるかと思います。
(「=」をつけたフィールドに対しても、通常と同様に抽出条件は
 指定できます)


・・・長くなりましたが、以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/26 17:37

クエリの段階でチェックの内容を保持したいとなると、


テーブルが必要になると思います。

テーブル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 でチェックがあるもの)


クエリの段階ではなく、フォーム上で良ければ、
テーブルの追加が不要な実現方法もあると思います。
また、各フィールドの編集可/不可等簡単に設定できると思います。
    • good
    • 0

No1とNo3です。


No1の
テーブル1-1
は、

>テーブル1を別名で作成するか、あるいはテーブル1のIDを持つ
>テーブルを作成するかして、

のテーブル名です。少し説明が抜けていました。
    • good
    • 0

No1です。


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

クエリに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を操作し、
その結果を上記のクエリで表示する、という方法に
なります。
システム全体がわからないのでこのようなところですが、
システムによってはテーブルの作成や表示方法に
工夫ができるところがあるかもしれません。
    • good
    • 0

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