<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>ということで百人一首
  1 2 3 4 5 6 7 8 9



ということで百人一首 7

■詠み終わった歌は表示させない

   ・上の句を、順番に表示させるようにする
   
・下の句のどれかをクリックするとかすると、正解か不正解か判定されるようにする
   ・詠み終わった句は、下の句の一覧からはずす
   ・上の句が、1句ずつ、ランダムに表示される

ではでは、3つ目の課題です。
読み終わった句は、表示されないようにしちゃおうと思います。

これは、どうやってやるかなぁ・・・。
一番確実なのは、クエリを使う方法だと思うんですけどね。こういうのは好みがあるかも・・。
とりあえず、今後の展開もあるので、クエリを作って挑戦してみましょう。

クエリを新規に作成しますよ。

「追加」ボタンでテーブルを選んだら、「テーブルの表示」ウィンドウだけ閉じます。

まず、一番上の * マークをダブルクリックして、このテーブルの中の全フィールドが表示されるようにします。

で、こんなふうにします。

これで、「選択」というフィールドがチェックついてないレコードだけ、表示されるようになります。
このクエリを、テーブルの代わりに使おう、というわけなんです。

では、このクエリに何か適当な名前を付けて保存してください。
わたしは[Q_下の句用]にしました。
名前はとりあえずなんでもいいですけれど、なんてつけたかわかんなくなっちゃうってのはナシですよ。

[下の句用]のフォームは、今、テーブルのデータをそのまま全件表示するようになってますよね。
それは、テーブルを基にして、[下の句用]のフォームを作ったからです。
[下の句用]フォームのレコードソースが[100ku]テーブルになっている、というわけなんですけど、このレコードソースをこのクエリと入れ替えることによって、[下の句用]フォームには、「選択チェックがついてないレコードのみ」表示されるようになります。
つまり、正解が出てない句だけが表示されるようになるわけですね。



では、レコードソースの入れ替えです。
あとからレコードソースを入れ替える際のコツは、例えば、今回のケースでしたらば、フォームでは[番号]と[下]と[選択]の3つのフィールドを表示させてますよね。最低でもこの3つのフィールドが表示されるようになってるクエリでないといけませんよね。意味わからないという人おられます?難しく考えすぎなんじゃないですか???落ち着いてよく考えてみてください。各テキストボックスやチェックボックスと結びついているフィールドがなくなっちゃうってことにならなければ、問題なし、っていう意味ですよ。

下の句のフォームをデザインビューで開いて、フォームのプロパティを見ます。
レコードソースっていうプロパティ、ありますよね。
ここを、テーブルから、さっき作ったクエリに変更します。
直接入力するんじゃなくて、一覧から選ぶようにしてくださいよ。
別に直接入力してもいいんですけどね。凡ミスを引き起こさないよう、用意されてる機能や一覧はなるべく活用するのが通ってもんです。

いちおう、確認を・・・。
そっとフォームビューに切り替えて、今までと表示の様子が変わってないことだけ確認して、デザインビューに戻ってください。

さて、これでよさそうなもんなんですけど・・・。
まだもう一仕事残ってますよね。そうそう。再クエリ、です。
クエリを基にしているフォームの場合、フォームを開いたあと、[選択]チェックをクリックしても、そのままでは絞り込まれた状態の表示にはならないんでしたよね。そこで、どこかのタイミングで、[下の句用]のフォームの中身を再クエリしてやる必要があります。

では、三度、チェックボックスの「クリック時」のイベントに一行書き加えます。
下の画面まで、たどり着けますですか???そろそろこういう操作にも慣れてこられたころでしょう。

サブフォームにしている場合、Meと一口に言っても、どのフォームのことを指しているか、判断が難しいときがあります。
今回は、サブフォーム内のチェックボックスをクリックしたときのイベントでのことなので、Meといったら、下のほうのサブフォームのことを指すと考えてよいと思います。
なので、「わたしを再クエリします」ということで、[下の句用]のフォームの中身(サブフォームとして埋め込まれてるものですが)が、再クエリされて、チェックがついたレコードが表示対象から除外されます。

書き加え完了したら、このウィンドウを閉じ、[下の句用]フォームを保存しつつ閉じましょう。

んでは、実験です。
[百人一首フォーム]を開きます。
一番最初は、1の句が読み札として、フォームの上のほうに表示されますよね。
なので、1行目の下の句をクリックします。
正解!というメッセージボックスが出たら、OKボタンをクリックします。

すると、1の句が、下の句の一覧から消えてなくなってると思います。
まだ正解してない句だけが、一覧表示される仕組みができました。

こうなると、上の句も、自動的に次の句に移動しててもらったほうがよさそうですね。
せっかく次に移動するボタン作ったんですけど・・・。どうしましょう。これはこれでとっときますか。

んでは、先ほどの、[下の句用]フォーム内のチェックボックスのクリック時のイベントのところ、もう一度開いてください。
すんなりたどり着けそうですか?

コードは、こんなふうになります。
これ、実は結構難しいんですけどね。・・・・要するに、「今、下の句用のフォームにいるので、上の句用のフォームの方に移動してから、レコードの移動を実行する」っていう段取りになります。
サブフォームの名前ではなくて、サブフォームが埋まってるコントロールの名前、なので、そのあたり十分注意しつつ入力してくださいね。

書き終わったら、このウィンドウは閉じて、フォームも保存しつつ閉じておいてください。



で、早速実験・・・と行きたいところですが、その前に・・・。
テーブルを直接開いて、1レコード目のチェックをクリックしてはずしておきましょう。

これついてると、フォーム上に1の句が表示されませんもんね。
なんで?なんて思ってる方はおられないですよね・・・落ち着いて状況を整理してみてくださいよ。
今何をやってるのかわからなくなっちゃうのが一番もったいないんですからね。



で、改めまして、下の句をクリックし、メッセージボックスのOKボタンをクリックすると・・・。上の句も、次の句に移動してます?

先に用意していた「次の句」ボタンをクリックすると、上の句がひとつパスされることになりますので、そうすると、最終的に下の句が「余る」ことになりそうですけれど、まあ、いちおう、かるたとりゲームは成立するんじゃないかなーと思いますので、今日はこんな感じにとどめておこうと思います。