<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>食いだおれデータベース
  Page1Page2Page3Page4Page5Page6Page7Page8Page9Page10Page11Page12 Page13



<食いだおれデータベース作戦 12>

メッセージボックスの名前や、メッセージボックス内のボタンの呼び方を確認できたら、構文自体はパターンがありますから、そのままそっくり活用してください。

If MsgBox("終了します",vbYesNo) = vbYes Then

DoCmd.Quit

Else

End If

もし、vbYesNoタイプのメッセージボックスでvbYesの方が選ばれたら、Accessを終了し、それ以外のときは特になにもしない、という意味になります。ピリオドとカンマの違いがわかりにくいですが、その辺も意識しながら入力しましょう。

MsgBox以下の処理を書いている間は、入力補助の機能が働きます。突然飛び出してきますが、悪気はないのでうまく活用してやってくださいね。

最終的に上のでか文字のように入力されればオッケーです。
カーソルを他に移動させたとき、エラーになったりしないでところどころ大文字になってれば、ちゃんと構文としてみとめられたことになるでしょう。
実行したときこけることもありますから、まだ気は抜けないですけどね。

[Tab]キーを旨く使って、Ifのときの処理を少し内側に書くようにすると、複雑な構文も見やすくなると思います。
今日は短い構文なので、左端揃えても別にどうってことないですけど、まあ、気分的に下のようにしてみました。

よければコードを書くウィンドウだけ閉じて、フォームを保存しましょう。

と、メニューから「おしまい」のボタンをこんな感じのメッセージボックスが出るようになります。
[はい]と[いいえ]のふたつのボタンが出るようになりましたよね。

[いいえ]の方をクリックすると、何も起こらないと思います。
[はい]をクリックしてはじめて、Accessが終了します。


さて、ここまでいかがでしょう。いろいろ作り込んできましたよね。役に立ちそうなの、出てきました?

ここまでご覧いただいてだいたいお察しいただけたんじゃないかと思うんですが、同じような結果を得るための動作でも、いくつかやり方があります。方法はひとつじゃないんですね。決まった使い方はありませんし、その辺がまた悩ましいところかもしれないです。

また、ところどころVBAなるものが登場しました。
ときどき、「VBAを勉強したい」という方いらっしゃるんですが、独立してVBAだけ勉強しようとしても、そうはいきません。別に特別な処理をするためのものでも、高度な処理をするためのものでもないんです。「VBAが使える=Access上級者」と勘違いしていらっしゃる方も多いんですが、決してそういうことではないですよね。

こういうデータベースをいくつか作っていくプロセスで、フォームやテーブルの仕組みを覚えながら習得していくものです。決してVBAだけ覚えようとしないようにしてください。勉強するにしても、必ず他のオブジェクトと絡めて覚えていくようにしましょう。また、クエリーやマクロをまったく理解していない状態でVBAだけ覚えても、覚えられるかもしれませんがあんまり意味はないでしょう。とにかく、高度な処理をするための夢の言語ではありませんので、「VBAがあればなんでもできる」と思ってしまわないように注意しましょう。まず、フォーム−テーブル−クエリーの関係をしっかりつかんで、そこにマクロやコードがどう絡んでくるのか、そう考えた方がいいと思います。


で、改めていろいろ入力テストを・・・。いちおう、どんな小さなシステムでも、50件くらいいろんなデータの入力をしましょう。
ボタンクリックしたとき、次のレコードに移動したとき、フォームを閉じたとき・・・。
動きがいろいろ加わりますから、いろんなデータ入れてみないと分からないことってあると思うんです。

あ、見つかりました?今あたしもひとつ見つけたですよ。[食いだおれ入力]フォーム。
紫色のフォームで新規にお店の入力している最中のことです。

ま、入力には差し障りないんですけど、左上のテキストボックス「件数のカウント」をしてるやつ。
この数字が、何件入力しても変らないんですよ。

一回フォームを閉じて、もう一回開くと、ちゃんと表示してるんですけど・・・。

これは、フォームというものが基本的に、開いたときのレコードソースの状態を表示するものだからこうなるんですね。
開いたとき、データが16件だったのでCount関数は16という数字を返しました。
で、いったんフォームを閉じてまた開くまで、この状態で表示されてるわけです。

で、どうしよう、ということなんですが、考え方はふたとおりあると思います。どちらか片方、お試しになってみてください。


Count関数ではなく、直接テーブルの中身を数えるDcount関数に書きかえる方法

今、=Count(*)となっているコントロールソース欄を、

=DCount("ナンバー","食いだおれテーブル")

と、直接テーブルのレコード件数を数えるようにします。
[ナンバー]なら主キーだし、絶対入力されてるはずですから、数えるのにもってこいですよね。


[新規]ボタンクリック時のイベントで、再クエリー

早い話、Count関数を使っている場合でも、一度再クエリーすれば、フォームは最も新しいレコードソースの状態を確認して表示するようになるはずですもんね。

Private Sub コマンド18_Click()

DoCmd.Requery

DoCmd.GoToRecord , , acNewRec

End Sub

再クエリーというアクションを入れる場所は、新規レコードに移動する前です。
後だと、フォームは1件目のレコードを表示しようとしちゃいますので、何万回ボタンクリックしても、新規レコード入力状態にならないってことになっちゃいます。


今回の場合はどっちの方法でも、最新の件数が表示されると思います。
(入力中のレコード、つまりエンピツマーク状態のレコードは、まだテーブル内にキチンと保存されたことになってないので、カウントされませんけども・・・)

いかがでしたでしょう。
例題は食いだおれとかいってちょっとふざけた内容でしたけど、基本的なリレーションシップの考え方、つかんでいただけたんじゃないかと思います。
また、より入力しやすくするための機能とか、いろいろご紹介してまいりました。
いつしか、みなさんのデータベース作りのお役に立つとよいんですけれど・・・・。