<HOME  <お願い事項  <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--料理レシピ集を作る
  1 → 2 → 3



ついでに・・・。
もうちょっと工夫して、「うまい、まずい」をトグルボタンで選択できるようにしちゃいましょうか。

[味]っていうテキストボックスを削除しちゃって、かわりに「フレーム」を作ります。
で、フレームの中に、下のようにトグルボタンをふたつ作って(コピーしたら返って面倒ですよひとつずつツールボックスから作ってください)、それぞれボタンの標題を変えます。それぞれのトグルボタンの「オプション値」は、1、2と、半角の数字になってると思います。両方1じゃだめですよ。どっちかが1、どっちかが2、です。

で、このフレームのコントロールソースを(フレームのですよ、フレームの。トグルボタンのじゃないですよ)、「味」にします。
これで、「味」というフィールドの中身は、1か2ということになります。「うまい」のボタンをクリックしたときは1、「まずい」のときは2、例えばそんな感じ。
2択3択くらいなら、この方が操作しやすいし、見た目にもわかりやすそうな感じしません?
トグルじゃなくて、オプションボタンとかチェックボックスでもいいかもしれないですね。

そうじゃなくて、「うまい、まずい」という文字がフィールドの中に入ってきてほしい場合は、フレームじゃなくて「コンボボックス」にするといいでしょう。
「うまい、まずい、まあまあ、いまいち・・・」など、自由に入力したいときは、やっぱり「テキストボックス」ですよね。
どんなデータがどういうふうに入ってきたらいいのか、その辺をいろいろ考えて、一番操作しやすいコントロールを作ってくださいね。


さて、毎度難所の「自動的に番号を振る」という仕組みですが、もう何回か同じようなことお話してますんですぐイメージが湧くという方もいらっしゃるかもしれませんね。
「料理の番号」を自動的に付けてみようと思います。まあ、あまり欲張らず00000001、という具合に・・・。
いちおう、わたしは簡単に仕組みを作ってみました。

まず、フォームのどっか端っこの方に、コマンドボタンをひとつ作ってください。
どこでもいいですよ。あとで動かせばいいし。
で、そいつの「クリック時」のイベントで、「新規レコードに移動して、番号を自動的に振る」処理を作ります。

こういう、フォームの中の動作に密着した処理は、マクロよりコードを書いたほうがゼッタイに簡単です。
マクロの方が難しい。そんなわけでコードを下に記しますね。
緑色の字(シングルコーテーションで始まってる行)は、説明文としてわたしが入力したもので、これはいりません。
実際、必要かなと思われるのは4行で、一番下の「カーソルを料理名欄へ」というとこの処理はおまけです。

ね、簡単ですよね。
これが、「AA-000001」とか、文字とか記号を含めたフォーマットにしたい場合などは、もうちょっと工夫しないといけませんね。
「どうやればいいの?」という人は、とりあえず上のコードを完成させて手ごたえを確かめてから、少しずつ考えていってください。
Me![番号]=○○○○○ の、○の部分を工夫すれば、如何様にもなりますよ。
なのでまずは上のコードがどういう意味なのか、どうしてこれで番号がつくのか、どういうタイミングでつくのか、その辺から押さえていってください。


さてーでは実験です。
フォームビューに切り替えて、さっき作ったコマンドボタンをクリックすると、

番号、つきます?




大成功かな。
んじゃつぎに「材料」の入力を・・・。
表形式のフォームにしてますからちょっとかっこ悪いですけど、これなら材料が多くてもダイジョウブのはず。

フォームなので、スクロールバーを動かせばいいわけですから楽ですよね。
レポートだと、紙に印刷するわけですから、材料が140種類だったり2種類だったり差が激しいとレイアウトが大変ですけど、フォームならいろいろ作りようがあります。

で、この「材料」のサブフォームなんですけど、要するにこのフォームを通じて[材料テーブル]にデータが入っていくわけですよね。あれ、主キーってどうしてましたっけ?
確か、[番号]と[ナンバー]っていうフィールドを組み合わせてダブらないように、って感じで作ったと思います。
まあ、[ナンバー]をオートナンバー型にしてますからゼッタイダブらないんですけどね。

だから、このまま全然何にも気にしないで、材料だけ入力してればいいわけです。




でも、[手順]の方は、そうはいかないですよね。たしか、オートナンバー型じゃなくて、各料理の手順として、1,2,3,4・・・ってついていってほしいなぁって感じで作ったフィールドだと思います。

この部分ですね。↑

自分で1,2,3と入力するのが一番間違いないんですけど、面倒だなぁ、これも自動的に番号付けるような仕組み作りたいなぁ・・・という方は、挑戦してみてください。

サブフォームで、しかも、「同じ[番号]の中で1,2,3と採番」となると、少々複雑です。

まずは[手順フォーム]のプロパティを見ます。
上の図の、赤いところをダブルクリックすれば出てくるはずです。

フォームの「挿入前処理」にしましょうかね。

で、コードはこんな感じ・・・。

もしまだ1行も入力していない場合は、「値がないところに1を足す」わけにいかないので、問答無用で「1」が入るようにして、
それ以外の場合は、1を足すようにします。




んじゃ、フォームをフォームビューにひっくり返して・・・。
テストです。

手順を入力し始めますと・・・まず1行目は「1」とつきますね。

で、2行目を入力すると?

「2」ってつきます?

まあ、ちょっと、「表計算ソフト」と比較しちゃうと、カーソルが下に動くわけじゃないし、なんか入力しにくい感じもしますけど・・・。
あとは、1レコード削除した場合、番号が飛びますけど、これも手で修正しないとならないですね・・・。手順の番号は主キーにしてますから、空っぽにすると怒られるし、ダブっても怒られます。なるべくなら削除しなくてもいいように丁寧に入力していくのがいいですね。
あるいは・・・番号が飛び飛びになっても、まあいいか、って考えるとか。。。




さて、それでは仕上げを・・・。料理の一覧から料理の詳細フォームを出す仕組みを作ってみましょうか。

ええと、まずは下のようなフォームを新しく作りましょう。[料理テーブル]をもとに、表形式のフォームを簡単に作ります。

んで、左端に小さいコマンドボタンを作りましょうか。ボタンの標題はなくっていいですよ。小さいですから文字をうまく表示させるの難しいですよね。

そんで、このボタンをクリックしたら、該当する料理のデータが出てくるよう、さっきまで作ってたフォームを開くようにしてみましょうか。

では、このボタンの「クリック時」のイベントを・・・。

 
Private Sub コマンド4_Click()
DoCmd.OpenForm "料理フォーム", , , "番号='" & Me![番号] & "'"
End Sub




できました?
フォームビューに切り替えて、テストしてみてくださいね。


このデータベースのポイントは、「テーブルをどう設計するか」というところです。
実はこれが一番難しい。「リレーショナルデータベースの概念」を理解していないと、なかなか的を得たテーブル設計って難しいものなんです。
でも、いろいろ考えながら作っていくと、今回テーブルを3つに分けたことに、いくつか意味がありましたよね。
この辺をうまく理解していくと、業務に合ったテーブル作りをすることができて、それが強いては効率よく簡単にデータベースを作成していく足がかりになるんです。
テーブルをうまく設計していくのってほんとに難しいですよ。
無理せず、小さなデータベースを作りながら、理解を深めていってください。