• 締切済み

【Access】チェックボックスでの抽出

初心者です。よろしくお願い致します。 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 を抽出したいと思っています。 全チェックで全部表示されればいいと思います。 どうぞよろしくお願い致します。

みんなの回答

noname#140971
noname#140971
回答No.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]が更新される。 これは、仕入伝票で商品区分を指定して商品を絞り込んでいく際の常套手段です。 ここは、ここだけで別の質問にされたがいいです。 なお、関数一発で実現することもできます。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>クエリの抽出条件は9行しか入力できないようで、 「挿入」「行」でいくらでも挿入できます ただしあの書き方をした場合、10項目もあると 一度保存して再度デザインビューで表示すると とんでもないものに書き替えらてしまいますから 作った後はSQLビューにしてから保存、その後はデザインビューにしない というようにしたほうがいいでしょう

noname#140971
noname#140971
回答No.2

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:反対の反対語は? ***************************************************** 実際問題としては、この方が、何を出題しているのかが一目瞭然。 そして、設問の管理も簡単。 こういうやり方もあります。

h_akky_49
質問者

補足

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

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

>分野1の抽出条件の1段目に下記の式を入れました。 >[Forms]![F_kensaku]![ck1] これじゃチェックが入っていないときには Falseのレコードを取り出しますよ チェックが入っているときだけTrueのものを取り出したいのであれば =True and [Forms]![F_kensaku]![ck1]=True 以下同様です

h_akky_49
質問者

お礼

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

h_akky_49
質問者

補足

動作はうまく動いているのですが、また問題点が出てきました。 クエリの抽出条件は9行しか入力できないようで、分野が10項目以上あるときには何か方法がありますか? SQLビューにして直接書き込めばいいんでしょうか?