0

我正在创建一个数据库来跟踪我的学生在课堂上的参与情况。这是我到目前为止所设置的。我正在使用 Access 2007。

参与者主表 - 姓名、联系信息、注册班级、注册学期。在表中定义了注册班级(A 类、B 类、C 类)和注册学期(第 1 学期、第 2 学期)。主键是一个自动递增的数字,但学生都会得到一个学校 ID 号(ParticipantID)。

SELECT name, address FROM ParticipantMaster WHERE EnrClass = "Class A" and EnrSem = "Semester 2"Query1 提取 A 班第 2 学期 ( )注册的学生的姓名和地址。查询有效。

DailySessionLog 是一个表,用于表示每个每日课程。包括日期、讲师姓名(从列表中检查)、讨论主题(从列表中检查)的字段。

现在我想将 DailySessionLog 链接到 Query1 —— 让我每天检查学生当天是否有无、部分、半或完整的会话。我在链接这些和创建子表单时遇到了麻烦。有什么帮助吗?

我尝试在 DailySessionLog 中有一个 ParticipantID 字段,我将其链接到 Query1 中的 ParticipantID。它无法识别是 one:one 还是 :many 关系。如果我继续使用 Access 向导创建一个子表单,它会将 Participant 数据视为“更高”表单,将 DailySessionLog 数据视为“子”表单。我希望它是相反的方式。

感谢您的帮助!

4

2 回答 2

1

您打算将数据库“存储”到哪里?

我认为问题是你需要另一个表:一个 Particpiant_Daily_sessioN_log 它将存储每个学生参与的每日日志的结果。

考虑一下您不希望为每个学生列出的讲师姓名、主题和日期的表格 dailysessionlog 是吗?

因此,您所拥有的是很多学生可能会上课,而一个班级可能有很多学生。这意味着您需要解决多对多问题,然后访问才能确定您想要做什么。

想想下面的表格: Participant (ParticipantID) Class (ClassID) Session (SessionID, ClassID) ClassParticipants (ClassId, ParticipantID, Semester, year SessionParticipants (SessionID, ClassID, ParticipantID)

于 2011-11-07T21:17:33.980 回答
1

要创建一对一或一对多关系,您应该将 DailySessionLog 链接到 ParticipantMaster 而不是 Query1。然后,您将创建一个查询来显示给定学期给定课程的每日会话日志。例子:

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]

编辑

实际上,您想使用此 AND 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 回答