0

生徒のクラスへの参加を追跡するためのデータベースを作成しています。これは私がこれまでに設定したものです。私はAccess2007で働いています。

参加者マスターテーブル-名前、連絡先情報、登録済みクラス、登録済み学期。登録されたクラス(クラスA、クラスB、クラスC)および登録された学期(学期1、学期2)は表で定義されます。主キーは自動インクリメント番号ですが、生徒全員が学校ID番号(ParticipantID)を取得します。

Query1は、クラスA、学期2(SELECT name, address FROM ParticipantMaster WHERE EnrClass = "Class A" and EnrSem = "Semester 2")に登録されている学生の名前と住所を取得します。クエリは機能します。

DailySessionLogは、各毎日のクラスを表すテーブルです。日付、インストラクター名(リストからチェック)、ディスカッショントピック(リストからチェック)のフィールドが含まれています。

ここで、DailySessionLogをQuery1にリンクしたいと思います。生徒がその日にNone、Partial、Half、またはFullセッションに参加したかどうかを毎日確認できます。これらをリンクしてサブフォームを作成するのに問題があります。何か助けはありますか?

Query1のParticipantIDにリンクしたDailySessionLogにParticipantIDフィールドを設定してみました。それが1:1または:manyの関係であるかどうかは認識されません。アクセスウィザードを使用してサブフォームを作成すると、参加者データは「上位」フォームとして扱われ、DailySessionLogデータは「サブ」フォームとして扱われます。逆にしたいと思います。

助けてくれてありがとう!

4

2 に答える 2

1

データベースが参加を「保存」する予定はどこですか?

問題は、別のテーブルが必要だと思います。Particpiant_Daily_sessioN_logは、生徒が参加するたびに毎日のログの結果を保存します。

各生徒のインストラクター名、トピック、日付を記載したくないテーブルdailysessionlogについて考えてみてください。

つまり、あなたが持っているのは、多くの学生がクラスに参加する可能性があり、クラスには多くの学生がいる可能性があるということです。これは、アクセスが何をしたいのかを理解する前に解決する必要のある多対多があることを意味します。

次の表を考えてみてください。参加者(ParticipantID)クラス(ClassID)セッション(SessionID、ClassID)ClassParticipants(ClassId、ParticipantID、学期、年SessionParticipants(SessionID、ClassID、ParticipantID)

于 2011-11-07T21:17:33.980 に答える
1

1対1または1対多の関係を作成するには、DailySessionLogをQuery1ではなくParticipantMasterにリンクする必要があります。次に、特定の学期の特定のクラスの毎日のセッションログを表示するクエリを作成します。例:

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = "Class A" AND ParticipantMaster.EnrSem = "Semester 2"

ただし、ハードコードされた文字列ではなく、変数パラメータを使用する方が適切です。例:

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = [ClassName] AND ParticipantMaster.EnrSem = [SemesterName]

または、開いているフォームのコントロールの値を使用するには、次のようにします。

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = [Forms]![FormName]![ClassControlName] AND ParticipantMaster.EnrSem = [Forms]![FormName]![SemesterControlName]

編集

実際には、これとxQbertのアイデアを使用したいので、簡潔にするために次のようなテーブル名を使用します。

Participants (a.k.a. ParticipantMaster)
Sessions (a.k.a DailySessionLog)
ParticipantSession (a.k.a. Participant_daily_session_log)

最初のクエリは次のようになります。

SELECT {field list}
FROM
    Participants
    INNER JOIN ParticipantSession ON Participant.ID = ParticipantSession.ParticipantID
    INNER JOIN Sessions ON ParticipantSession.SessionID = Session.ID
于 2011-11-07T23:29:45.223 に答える