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



ということで百人一首 6

■データをインポートしてくる

さて、これでひとつ目の課題はクリアです。
続いて、ふたつめの課題にまいりましょう。

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

正解か、不正解かを判定する仕組みを考えます。

MS-Accessはデータベースであってゲームを作るソフトじゃないので、あまり見栄えのいいもんはできません。そこは割り切ってください。
今回は、左端にチェックボックスを作って、該当する下の句をクリックしたら正解!というようにしたいと思います。
ちょっと難しいですけど、順をおってやってけば問題ないと思います。がんばりましょう。

まず、[下の区用]のフォームをデザインビューで開きます。

で、チェックボックスを右の端のほうにひとつ作ってください。
ラベルは、いらないので取っちゃってください。

このチェックボックスは今作ったばっかりなので、テーブルのどのフィールドとも結びついてません。
このフォームが基にしているテーブルのフィールドと、全然関係のないもののことを「非連結」と言います。そうですよね。
非連結のチェックボックスをひとつ作ったことになるわけです。

じゃ、フォームビューに切り替えてみましょう。

こんなふうに、各行にひとつずつチェックボックスができます。

どれかクリックしてみましょう。
キャー!
全部変わっちゃう!!!

と、ビックリした方いらっしゃいます???なんで全部変わっちゃうのかわからない・・・という方・・・。
多分、大半の方は理解されていると思いますが・・・なんでかっていうと、非連結だからです。
フォームってのはですね。テーブルやクエリのデータを表示するための枠に過ぎないんですよね。
このチェックボックスは、非連結です。
チェックボックス自体は、みなさん、1個しか作ってないですよね。
だから、たくさんあるように見えて、実は1個しかないんです。

「どのレコードの(どの歌の)チェックボックスなのか」ということを、ちゃんと明確にしてやらないといけません。
つまり、非連結では、各歌とチェックボックスが結びつかないわけです。



んでは、フォームをいったん閉じましょう。保存しながら閉じてください。
で、テーブルのデザイン画面を見ます。

Yes/No型のフィールドをひとつ追加します。

このフィールドを、さっきのチェックボックスと結びつけてやればよいわけなんです。
まあ、とりあえず一通りやってみましょう。
これどうしても理解できないという人、結構いますから、今わからなくても、あまり焦らないで、とにかく一通り進めてみてください。

テーブルを保存して、閉じます。
そして再び、[下の句用]のフォームをデザインビューで開きます。

チェックボックスのプロパティを↑見ましょう。
「コントロールソース」というプロパティ欄に、さっき追加したフィールドを選びます。入力せずに、一覧から選ぶようにしましょう。
できたら、再びフォームビューにします。
どれかひとつチェックをしてみると・・・。

今度は、ひとつだけチェックがつきますよね。
つまり、チェックボックスをチェックしているのではなくて、テーブルの「選択」という名前のフィールドをYesにしている・・・というわけです。

多分、[下の句用]のフォームの横幅サイズも少し変わってるんじゃないかと思いますので、[百人一首フォーム]を開いてみて、おさまってるかどうか確認しつつ調整をしてください。まあ調整は別に後でもいいですけども、気がついたときにちょこちょこなおしといてくださいね。

さて、次に・・・このチェックボックスがクリックされたら、正解かどうかを判定するようにしたいと思います。
これ、結構めんどくさいので、今回は、フォーム上に表示させている[番号]というテキストボックスの値を比較します。

多分、フォームウィザードで作ったフォームなので、皆さんの画面でも、どっちの[番号]も「番号」というテキストボックス名になってると思います。ちょっと難しいところなんですけども・・・これ、ふたつとも「サブフォーム」の中のテキストボックスなんですよね。

で、今回は、チェックボックスをクリックしたときに、ふたつのテキストボックスの中身を比較するので、下のほうの[番号]テキストボックスは、

   Me.番号

という書き方でOKです。
でも、上のほうのテキストボックスは、あれ、一応、別のフォームという扱いになるんですね。
こういう場合の書き方がちょっとややこしいんですが、まず、上の[番号]テキストボックスがどこにあるか確認しないとなりません。
[百人一首フォーム]をデザインビューで見てみると・・・。

わたしの場合は、下の図の、赤い枠の部分の名前は、[埋め込み2]ってなってます。
必ずしも、サブフォームにしているフォームの名前ってわけじゃないんですよ。
「百人一首フォームという名前のフォームの中の埋め込み2という名前のコントロール」ということになります。
で、さらに、この 埋め込み2 は、サブフォームを表示するためのコントロールであり、その中に[番号]というテキストボックスがあるわ、ということで、

    Forms!百人一首フォーム!埋め込み2.Form!番号

と書かなければなりません。
フォーム名やテキストボックス名などにハイフンなどの記号をよく使う人は、

    Forms![百人一首フォーム]![埋め込み2].Form![番号]

という具合に、半角のカギカッコで囲んどいた方がいいですね。
でも、ハイフンとか、あんまり使っちゃいかんですよ。
イフンって、コンピュータ内で意味のある記号ですよね。
引き算の記号とか。誤動作の原因にもなりかねませんので、使わない方が無難です。

んでは、[百人一首フォーム]はいったん閉じて、[下の句用]フォームをデザイン画面で開きます。
チェックボックスの「イベントプロパティ」ってやつを再び、見ます。

チェックボックスだからなぁ・・・どのイベントがいいのかちょっと迷うところなんですけども、「クリック時」のイベントにしときましょうかね。
右端のビルドボタンをクリックします。
今回もコードビルダを使ってください。マクロだと、やっぱ難しいと思いますので・・・。

と、こんな感じにします。

え?難しくて入力できない?
んもー・・・ちょっと大きめに表示しますので、これ参考にしてがんばって入力してください。
くれぐれも丸写ししないでくださいよ。フォーム名とかコントロール名とか、違うと思いますから・・・。


If Me!番号 = Forms!百人一首フォーム!埋め込み2.Form!番号 Then
    MsgBox "正解!"
Else
    MsgBox "違う!"
End If



では、フォームを再び開いて、テストです。
このテストは、[下の句用]フォーム単体ではできないので(なんでだかは、わかります・・よね?)必ず[百人一首フォーム]を通じて行います。

とりあえず、一番最初は1番目の句が出てると思うんで、下の句も1番目のやつをクリックしてみてください。
メッセージボックスが、出ます?
2番目の句をクリックすると、正解ではないほうのメッセージが出ると思います。

このままだと、正解だろうが不正解だろうが、チェックボックスはチェックついたままになっちゃいますよね。
これは仕方がないんですよ。これが今の段階では普通の状態です。

正解だったらこれでいいんですけど、不正解だったら、いったんつけたチェックを元に戻しておいた方がいいですよね。
もう一工夫いたしましょう。
[百人一首フォーム]はいったん閉じましょう。開いててもいいんですが、サブフォーム部分の変更をするわけなので、閉じておいた方が無難です。

下の句のフォームをデザインビューで開いてください。

チェックボックスのプロパティをもう一度出して、クリック時のイベントのところをクリックします。
で、右側のビルドボタンをクリックしましょう。

わたしのは、チェックボックスの名前が「チェック4」という名前だったので、こういう書き方になりました。

よろしければ、[下の句用]フォームを保存して閉じ、再び[百人一首フォーム]を開いてテストです。
わざと違うやつクリックして、メッセージボックスにOKしたあと、チェックが消えるかどうか確認してみてください。

これで、第2の課題はクリア、かな??と思います。
あんまり見栄えのいい画面じゃないですけどね。
まあ、もともと、ゲームを作るようなソフトじゃないので、今日のところはこのくらいにしといてください。