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

初心者です。よろしくお願い致します。
MS Access2003で問題集を作成しています。
テーブル:T_mondai
・ID 数値
・問題文 テキスト
・正解 テキスト
・分野1 チェック
・分野2 チェック
・分野3 チェック
※分野1~4のチェックは複数選択可能です。

例えば次のようなデータが入っているとします。(IDとチェックボックスのみ例示します)
ID、分野1、分野2、分野3の順です
A ○ ○ ×
B ○ × ×
C × × ○
D × ○ ×
E ○ × ×

フォーム:F_kensaku
・ck1 チェックボックス
・ck2 チェックボックス
・ck3 チェックボックス
・bt1 プッシュボタン(抽出の実行)
※ck1~ck3は複数選択可能です。
※ck1~ck3の規定値は「False」にしました。

フォーム:F_kensakuでチェックした条件でテーブル問題から抽出するクエリを作ろうと思っています。
それで、
クエリ:Q_sentaku
を選択クエリで作りました。
分野1の抽出条件の1段目に下記の式を入れました。
[Forms]![F_kensaku]![ck1]
以下、
分野2:[Forms]![F_kensaku]![ck2](抽出条件の2段目)
分野3:[Forms]![F_kensaku]![ck3](抽出条件の3段目)
に入れました。(OR条件です。)
実行すると、チェックが2つ、3つの時はきちんと抽出されるのですが、チェックが1つの場合、全データが選択されてしまいます。

何が良くなかったのでしょうか。
いい方法があればお教え頂ければと思います。

ちなみに、
F_kensakuで
CK1のみ:ABE
CK2のみ:AD
CK3のみ:C
CK1とCK2:ABDE
CK1とCK3:ABCE
CK2とCK3:ACD
を抽出したいと思っています。
全チェックで全部表示されればいいと思います。

どうぞよろしくお願い致します。

A 回答 (4件)

リレーショナル・データベースの設計の基本形。


メイン・サブフォームの基本形。
以上に忠実にやってみたらどうなるかです。

設問:

ID___設問番号____分野___問題一覧_ID
01_____________1____A_______アメリカの首都は?
01_____________2____B_______アメリカ大陸発見者は?
02_____________1____C_______賛成の反対語は?
03_____________1____A_______英国の首都は?
04_____________1____B_______ペニシリンの発見者は?
05_____________1____C_______反対の反対語は?

分野:整数

<ルックアップ>
コンボボックス
値リスト
1;A;2;B;3;C
列数 2
列幅 0cm;1cm

問題一覧_ID:長整数

テーブル/クエリ
SELECT 問題一覧.ID, 問題一覧.問題文, * FROM 問題一覧;
列数 2
列幅 0cm;3cm

さて、設問テーブルは主テーブルと従テーブルという関係にはなっていません。
ここが、問題をややこしくしています。

設問標題:

ID___作成日_________作成者
01___2008/02/27__鈴木
02___2008/02/27__鈴木
03___2008/02/27__鈴木
04___2008/02/27__鈴木
05___2008/02/27__鈴木

設問明細:

ID___設問番号___分野___問題一覧_ID
01_____________1___A_______アメリカの首都は?
01_____________2___B_______アメリカ大陸発見者は?
02_____________1___C_______賛成の反対語は?
03_____________1___A_______英国の首都は?
04_____________1___B_______ペニシリンの発見者は?
05_____________1___C_______反対の反対語は?

こういう設計ならば、仕入伝票標題と仕入伝票明細という関係に同じ。
よって、あらゆる伝票入力のノウハウが使えます。

現行の設計で、無理やりにこういうテーブル構造にするには、

設問標題

SELECT 設問.ID
FROM 設問
GROUP BY ID;

設問明細

SELECT 設問.ID, 設問.設問番号, 設問.分野, 設問.問題一覧_ID
FROM 設問;

という二つのクエリを作成することです。

次のフォームウイザードで2つのクエリを指定すると次のようなフォームが作成されます。

リンク子フィールド=ID
リンク親フィールド=ID

の手動指示は必要。

=========================================================

ID       [    1]

設問明細
---------------------------------------------------------
  ID  設問番号 分野  問題一覧_ID
---------------------------------------------------------
   1|      1 A  アメリカの首都は?
   1|      2    B  アメリカ大陸発見者は?


=========================================================

さて、ここまでくれば、サブフォームの分野を選択した場合に選択ボックスが画面に現れると良いことが判ります。
そして、その選択ボックスは分野に該当する問題だけが抽出されている。
そして、その選択がなされるとサブフォームの[問題一覧_ID]が更新される。
これは、仕入伝票で商品区分を指定して商品を絞り込んでいく際の常套手段です。

ここは、ここだけで別の質問にされたがいいです。
なお、関数一発で実現することもできます。
    • good
    • 0

>クエリの抽出条件は9行しか入力できないようで、


「挿入」「行」でいくらでも挿入できます

ただしあの書き方をした場合、10項目もあると
一度保存して再度デザインビューで表示すると
とんでもないものに書き替えらてしまいますから
作った後はSQLビューにしてから保存、その後はデザインビューにしない
というようにしたほうがいいでしょう
    • good
    • 0

Q、いい方法があればお教え頂ければと思います。


A、全く、発想が違うのですが・・・。

問題一覧:

ID___問題文________________________正解__________分野
01___アメリカの首都は?_________ワシントン_______1
02___アメリカ大陸発見者は?___コロンブス_______2
03___賛成の反対語は?_________反対______________3
04___英国の首都は?____________ロンドン__________1
05___ペニシリンの発見者は?__パスツール______2
06___反対の反対語は?_________賛成______________3

設問:

ID___設問番号___問題一覧_ID
1______________1__________________1
1______________2__________________2
2______________1__________________3
3______________1__________________4
4______________1__________________5
5______________1__________________6

設問1の1は、問題一覧の1。
設問1の2は、問題一覧の2。
設問5の1は、問題一覧の6。

設問クエリ:

ID__設問番号__問題文________________________正解__________分野
01___________1___アメリカの首都は?_________ワシントン_______1
01___________2___アメリカ大陸発見者は?___コロンブス_______2
02___________1___賛成の反対語は?_________反対______________3
03___________1___英国の首都は?____________ロンドン__________1
04___________1___ペニシリンの発見者は?__パスツール______2
05___________1___反対の反対語は?_________賛成______________3

****[設問設定入力フォーム]******************************

ID:_________________[0006]

[設問明細]_______________________________________________________________________
 01:アメリカの首都は?_____________
 02:アメリカ大陸発見者は?_______
 03:反対の反対語は?

*****************************************************

実際問題としては、この方が、何を出題しているのかが一目瞭然。
そして、設問の管理も簡単。

こういうやり方もあります。

この回答への補足

おっしゃる通りです。
が、1つの問題で1つの分野とはっきり定義づけられたらいいのですが、1つの問題で複数の分野を指定することがあるのです。
それで、各分野でチェックボックスで指定する方法を取った訳なんです。
よろしくお願い致します。

補足日時:2008/02/28 16:51
    • good
    • 0

>分野1の抽出条件の1段目に下記の式を入れました。


>[Forms]![F_kensaku]![ck1]
これじゃチェックが入っていないときには
Falseのレコードを取り出しますよ

チェックが入っているときだけTrueのものを取り出したいのであれば

=True and [Forms]![F_kensaku]![ck1]=True

以下同様です

この回答への補足

動作はうまく動いているのですが、また問題点が出てきました。

クエリの抽出条件は9行しか入力できないようで、分野が10項目以上あるときには何か方法がありますか?

SQLビューにして直接書き込めばいいんでしょうか?

補足日時:2008/02/28 16:55
    • good
    • 0
この回答へのお礼

ありがとうございます。
早速試してみました。今のところうまく動いているようです。
実際にはもう少し複雑になるので、実際のデータベースで少し動かしてみたいと思います。ありがとうございました。

お礼日時:2008/02/28 14:02

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