学生のデーターベース作成について
年齢や学年が自動的に変わることは
できるのでしょうか?
たとえば誕生日がきたら、年齢があがるとか、
4月になったら学年があがるとかです。
よろしくお願い致します。

A 回答 (4件)

pussyfootさんの意見に賛成です。



ただし、単に計算しなさいと言っても年齢や学年を使用するアプリケーション毎に計算をしていては、バグが発生しやすくなってしまいますし、無駄が多いので、VIEWで取得できるようにするか、年齢や学年計算用のストアドファンクションを用意するのがいいと思います。

VIEWは、オラクルやSQLサーバーと言ったRDBにある機能で、ACCESSのクエリーのようなものです。

ストアドファンクションも、オラクルやSQLサーバーにある機能で、ACCESSのモジュールのようなもので、DBの中に用意することができる関数です。

なお、年齢はいいですが、学年は留年や休学があるので、自動的にと言うわけにはいかないのでは?
    • good
    • 0

データーベースの中身を更新するよりも、生年月日から年齢を計算して表示する方がスマートです。

学年についても同様です。
    • good
    • 0

基本的に、複数のデータを一気に書き換えるには、「更新クエリ」を使います。



例えば、「4月になったら学年が上がる」を行う為には、
1:クエリを新規作成する。学生テーブルを指定。
2:[クエリ]-[更新]と操作する
3:[学年]フィールドをダブルクリックして、クエリのフィールド部分に追加する。
4:[レコードの更新]のところに
[学年] + 1
と入力する。
5:クエリに名前を付けて保存する。
6:4月の1日になったら、このクエリを1回だけ実行する

のような操作で出来ますね。
4月の1日には、他にも卒業生の処理だとか、いろいろな処理が発生すると思いますので、これらを「年度更新」とか言う名前で一つの処理にまとめておき、それを実行するようにしたらいいと思います。


年齢についても、同様の操作で、
[年齢]フィールドを対象にした更新クエリを作って、[レコードの更新]のところに以下の式を記入し、データベースの起動時にでも実行してやれば、とりあえずは実現できます。
IIf(Month(Date())*100+Day(Date())>=Month([生年月日])*100+Day([生年月日]),Year(Date())-Year([生年月日]),Year(Date())-Year([生年月日])-1)

ちなみに、データベース起動時に何らかの処理をじっこうするには、マクロを新規作成して、任意の処理を記述し、名前を付けて保存で「AutoExec」という名前にして保存します。

あと、年齢については、osapi124さんも仰っているように、[年齢]フィールドを作らずに、常に[生年月日]からリアルタイムに計算した値を使うようにした方が、いい場合もあります。
(例えば、24時間データベースを起動しっぱなしにする場合とかは、上記のような「起動時に更新する」方式では、対応できません。)

学生データベースのような、
●一部の人間しか使わない
●1日の終わりには必ず終了する
システムの場合には、「起動時に年齢を更新」方式で十分な場合もありますが…

なおリアルタイムに年齢を計算するには、
1:クエリを新規作成(学生テーブルを選択)
2:全てのフィールドをクエリのフィールド部分に追加する
3:フィールド部分に、以下の内容を追加する
年齢:IIf(Month(Date())*100+Day(Date())>=Month([生年月日])*100+Day([生年月日]),Year(Date())-Year([生年月日]),Year(Date())-Year([生年月日])-1)
4:名前を付けて保存し、以後、学生テーブルを使う代わりに、このクエリを利用するようにする。

のようにします。
不明点等ありましたら、補足にてご質問ください。
    • good
    • 0

タイトルと内容の相関関係がわかりませんが・・・・・。



例えば「ある学校の全学生」をDBに入れて、リアルタイムに年齢や学年を
変更(日付連動で自動的に)することはできます。

「できるのか」という質問であれば答えは「できます」ですが・・。

で、art-cさんはその回答でよろしいのでしょうか?

どんな環境と目的で作成するのか、例えばart-cさんが学生で宿題レベル
の回答を探してるのか、学校職員で現実に構築を検討してるのか?
ごく簡単なものならエクセルでもできるし、もっと本格的なシステムにしたい
のか?

そのあたりがわかりませんと、答えられませんので、詳しい答えが必要なら
是非補足を入れてくださいね。

osapi124でした。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報