- ベストアンサー
アクセスで作業の履歴を蓄積する方法
育てているバラの管理表をアクセスで作成中です。 とりあえず作ってみましたが、作業の履歴の保存でつまずいてしまいました。 たとえば、施肥というフィールドを作ったとして、そこに施肥日時を入力すると前回のデータは消されてしまいますよね。 そうではなく、今まで行ってきた施肥の記録がすべて残るようにしたいのです。 多分、一鉢ごとにテーブルを作れば解決するのでしょうが、100鉢近くありこれからも増える予定なんです。また、すべての鉢に対してどの鉢がいつ施肥したかわかるように一覧でも見たいのです。 この場合、どういったデータベースの作成をしたらよいのでしょうか? 使っているヴァージョンは2000です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
**Hauyneさんアクセスの森を探検してますね。** >施肥の記録がすべて残るようにしたいのです >一鉢ごとにテーブルを作れば解決するのでしょうが、100鉢近くあり・・ >すべての鉢に対してどの鉢がいつ施肥したかわかるように一覧でも見たい >この場合、どういったデータベースの作成をしたらよいのでしょうか まず1・2番目の「記録がすべて残る・・」「一鉢ごとにテーブルを・・」に関してですが一つのテーブルで色々な種別の花の手入れや施肥作業を管理します。それと育てている花の情報を保存するマスタになるテーブル。これには一鉢づつ管理するコード番号やID番号が必要です。という訳で最低2つのテーブルを作れば管理できます。 *花マスタ(花の鉢を管理するテーブル) フィールドは 花ID(鉢No・花IDでもかまいません):他と重複しないように主キーとします。このフィールドでどの花・鉢か判断します。 品種名:花の名称(芳純とかヘリテージとか) 栽培開始日:種子を植えた日とか 発芽日: ・ などその花の情報を保存してキーによって管理します。 *作業テーブル(水を与えたとか施肥したとかの情報を保存するテーブル) 作業ID:オートナンバー型でOK。勝手に連番を振ってくれます。(作業テーブルはここがキーになります) 花ID:花マスタの主キー(このフィールドでどの花・鉢か判断します) 作業日:作業した日付 作業内容:施肥・水などの内容 テーブルの構築は最低でこのくらいです。 花マスタと作業テーブルの花ID同士を1対多のリレーションをすれば最小のデータベースが出来ます。 後は花マスタと作業テーブルを元にして作業の入力フォームを作れば入力も楽になります。 作業入力フォームは花マスタの情報を花マスタから花IDを使って表示する親フォームと作業を入力するサブフォームの形の場合と作業テーブルを元にしたフォームを作りそのまま作業テーブルに入力できるフォームとして品種名は花マスタから品種名を表示だけするフォームでも入力できます。 フォームの作業内容はコンボボックスで項目を作っても良いし作業内容のテーブルを別に作ってコンボボックスに表示してもOKだと思います。作業内容テーブルを作れば3つのテーブル構成になりますが。 作業入力フォームを使って作業テーブルに花を世話した作業をどんどん入力して蓄積していけば良いのです。 >すべての鉢に対してどの鉢がいつ施肥したかわかるように一覧でも見たい これは作業テーブルの作業内容で"施肥"というレコードを抽出して花マスタから作業テーブルの花IDを元に品種名を持ってきて作業日付を見ればどの花に施肥をした作業日がいつか分かります。 これはクエリを使えば簡単にできます。抽出の仕方などはヘルプや参考書を見て応用すれば出来ますよ。
その他の回答 (2)
- neKo_deux
- ベストアンサー率44% (5541/12319)
現在はそれぞれの鉢の状態を管理するテーブルがあるとかでしょうか? 鉢ID、鉢名称、バラ種別、肥育開始日 とか? -- > 今まで行ってきた施肥の記録がすべて残るようにしたいのです。 の場合は、上のテーブルに施肥日のフィールドを追加すると、そのようになってしまうと思います。 こういう場合は、手作業でこういう管理を行う場合、どういう表を作るか?を考えます。 △月△日、ID△△△のバラに△△△の肥料を△△△グラム施肥した。 △月△日、ID△△△のバラに△△△の肥料を△△△グラム施肥した。 △月△日、ID△△△のバラに△△△の肥料を△△△グラム施肥した。 … なんて作業の履歴の表があれば、IDを調べて行き、最後に施肥した日や今までの回数なんかを調べる事が出来ます。 手で調べると面倒ですが、そこはAccessがやってくれます。 新しいテーブル「作業の履歴」で、 施肥ID(施肥を行った際につける一連の番号、オートナンバー) 鉢ID(施肥を行った鉢のID、鉢のテーブルの鉢IDと同じ形式にします。) 施肥年月日 肥料の種類 肥料の量 などとします。 更に、[ツール]-[リレーションシップ]で、2つのテーブルの鉢IDフィールドを関連付けします。 この場合は、肥育テーブル→鉢テーブルと矢印がつながるよう、関連付けしておきます。 -- リレーションは便利なんですが、最初のうちはリレーショナルデータベースの考え方を理解していないと、リレーションが外せない、データが削除できないなんて事に良くなります。 mdbファイルのバックアップを取ってから作業してみてください。
お礼
回答ありがとうございます。 今まで簡単なデータベースをエクセルで作って使用してきたので、表を綺麗に埋めていくイメージで考えていたのが敗因のようです。 作業履歴のテーブルを別に作り、そこにどんどんデータを放り込んで、後は関連づけと抽出で必要なデータを取り出してやるんですね。 ちゃんと理解できたらリレーショナルは本当に便利ですね(今はまだそんな気がするレベルですが)。
アクセスに限らずリレーショナルデータベースの考え方の問題ですが、 1鉢(もしくは管理する単位)ごとにテーブルを作るのではなく、1鉢(もしくは管理する単位)ごとにテーブルのレコードを作成します。 施肥にかんしては、別なテーブルをつくり、いつ、どの鉢に、何を、どれくらい、といった情報を入力していきます。 あとは、必要な情報をクエリなどで抽出することになります。
お礼
回答ありがとうございます。 一度入力させたら後は変わらない基本情報のテーブルと、蓄積していく情報のテーブルに切り分けて、それをリンク抽出して使っていけばいいのですね。 どうもエクセルの表を埋めていく考え方から頭が切り替わっていなかったようで、回答を見て目から鱗でした。
お礼
またしてもわかりやすい回答ありがとうございます。 地図を貰ったのを良い事にとりあえず森に突っ込んでしまって、悪戦しています。やはりちゃんと弁当と水筒は用意しなくては・・・(笑 それはさておき、リレーショナル・データベースの根本を理解していなかったようです>私。他の方のお礼にも書きましたが、エクセルの表のようにテーブルに綺麗にデータを埋めて行き、テーブルその物を完成されたデータベース表としてみようとしていました。そうじゃなくて、テーブルはごちゃごちゃでも良いのでとにかくデーターを放り込んでいき実際にデータを見るときはクエリ等を使えば良いんですね。
補足
皆様、的確な回答ありがとうございました。 本当に根本的な考え方が判っていなかったために発生した疑問点でした。さっそく簡単な作業テーブルを作ってみて、とりあえず作業履歴を蓄積させる所までは出来そうです。あとは蓄積させたデータを見やすく表示させるだけ、、、と言いたいところですが、入力方法や、コンボボックスをわかりやすく表示させる方法等つまずいている部分も少々ありますので、マニュアル本と格闘して、うまくいかなかったらまた質問させていただきます。