Microsoft Accessの質問です。生徒の体育の記録のデーターベースを作ろうとしています。生徒は計測するたびに記録を更新していくのですが、そのたびに新しいデーターを新しいフィールドを作って入力していると、その分フォームも作り替えないといけないし、新しいフィールド名をいちいち入力するのも面倒くさいし困っています。かといって一つのフィールドの個人のレコードに文字数を増やして過去から現在までの記録を改行しつつ沢山入力していくと、集計や、クエリの関数を使うときに困ってしまいます。何かよい方法はないでしょうか?よろしくお願いいたします。

回答の条件
  • 1人3回まで
  • 登録:2007/03/18 09:38:43
  • 終了:2007/03/18 11:46:05

回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692007/03/18 10:16:43

ポイント35pt

たぶん生徒の名前か出席番号が主キーのデータベースになっているのではないかと思うのですが、

生徒テーブルと記録テーブルを分離すればいいと思います。

記録テーブルには

ID(主キー)、日付、名前、種目、記録

のようにして、名前で生徒テーブルと関連付けます。

計測するたびに記録テーブルに登録していき

集計のときにSQLを使って生徒名や日付などで抽出すればいいと思います。

id:July_Star

生徒テーブルと記録テーブルはすでに分離しております。記録テーブルのフィールドが増えていくので困っております。あと、SQLは難解そうなのでできれば避けたいです。ほかにいい方法があったらお願いいたしますm(_ _)m。

2007/03/18 10:28:00
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012007/03/18 10:52:28

ポイント35pt

横に伸ばすという考え方は表計算で用いるものであって、データベースで用いる考え方は1/で回答いただいているとおりに1記録1レコードとしておいて必要に応じてレコードをセレクトする、というものになります。


とりあえずの逃げ的な発想ですが、

  生徒コード

  最新記録日時

  最新記録

  最低記録日時

  最低記録

  最高記録日時

  最高記録

  履歴 ←メモ型・ここに過去の履歴を書き加えていく

といったような構成ではどうですか?

メモ型なら多少は自由度高いです。


ただし、あくまでも一時的な措置です。

SQLから逃げるということはリレーショナルデータベースを用いる利点を放棄している事に他なりません。

学校の先生というお立場に立つことが出来た方ならば数日で基礎はマスターできるはずですから、ぜひとも学んでください(自ら学ばずして人に教えるべからずです)

id:July_Star

実は、「逃げ的な発想」に書いていただいた内容が現在私が取っている対策でした。と、いうことは、SQLは避けて通れないということですね。早速勉強したいと思います。ありがとうございました。

2007/03/18 11:07:27
  • id:sisidokeima

    【テーブル】
     [tbl_Seito]
      SeitoID
      SeitoSimei

     [tbl_Syumoku]
      SyumukoID
      SyumokuName

     [tbl_Kiroku]
      KirokuID
      SeitoID
      SyumokuID
      KirokuData

    【クエリ】
    ●特定の生徒を見る・記録する
      SELECT tbl_Seito.*, tbl_Syumoku.*, tbl_Kiroku.*
      FROM tbl_Seito , tbl_Kiroku, tbl_Syumoku
      WHERE tbl_Seito.SeitoID=tbl_Kiroku.SeitoID
       AND tbl_Kiroku.SyumokuID=tbl_Syumoku.SyumokuID
     ・クエリを作成
     ・テーブル「tbl_Seito」「tbl_Kiroku」「tbl_Syumoku」の3個を追加
     ・「tbl_Seito」の「SeitoID」と「tbl_Kiroku」の「SeitoID」をリンクする.
     ・「tbl_Kiroku」の「SyumokuID」と「tbl_Syumoku」の「SyumokuID」をリンクする.
     ・「tbl_Seito」の「SeitoID」を下部の表示一覧に入れ,選択条件に生徒のIDを入れる.
     ・3つのテーブルすべての「*」を下部の表示一覧に入れる.
     ・整列や選択条件はご自由に.

    ●全部見る(無くてもOK)
      SELECT tbl_Seito.*, tbl_Syumoku.*, tbl_Kiroku.*
      FROM tbl_Seito
       LEFT JOIN tbl_Kiroku ON tbl_Seito.SeitoID=tbl_Kiroku.SeitoID
       LEFT JOIN tbl_Syumoku ON tbl_Kiroku.SyumokuID=tbl_Syumoku.SyumokuID
     ・クエリを作成
     ・テーブル「tbl_Seito」「tbl_Kiroku」「tbl_Syumoku」の3個を追加
     ・「tbl_Seito」の「SeitoID」と「tbl_Kiroku」の「SeitoID」をリンクし,リンクの線をダブルクリックし,「tbl_Seitoすべてにたいして・・・」を選ぶ.
     ・「tbl_Kiroku」の「SyumokuID」と「tbl_Syumoku」の「SyumokuID」をリンクし,リンクの線をダブルクリックし,「tbl_Seitoすべてにたいして・・・」を選ぶ.
     ・3つのテーブルすべての「*」を下部の表示一覧に入れる.(3列入る)
     ・整列や選択条件はご自由に.


    実際に使う場合はフォームの作成などが必要でしょうが,最低限上記のようにすればできると思います.

    以下は参考になるサイトです.
     Microsoft Access Club
      http://www.accessclub.jp/index.html

  • id:kn1967
    回答1/も2/もデータベース設計の見地からの回答なのですが、
    Accessのフォームの持つ機能を利用したSQLを使わない方法を追記しておきますので、
    ご一読いただければと思います。

    (ステップ1)テーブルの正規化
    記録テーブルを1記録1レコードという形で縦に伸ばすようにします。

    (ステップ2)フォームの主従関係
    生徒テーブルをレコードソースとした生徒フォームと
    記録テーブルをレコードソースとした記録フォームを造ります。
    生徒フォームの中にサブフォームとして記録フォームを配置して、
    生徒コードをリンクフィールドとして設定します。

    以上2ステップだけで、通常のデータ追加や閲覧であればクエリ無しで可能となります。
    ただし、集計等にクエリが必要になることは変わりありません。

    以上、参考になればよろしいのですが、、、
  • id:ikjun
    ボソッ・・・SQLを避けたいならば桐を使えばいいのに・・・・ボソッ

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません