我正在创建一个数据库来跟踪学生在课堂上的参与情况。这是我目前设置的。我在Access 2007工作。
参与者主控表-姓名、联系方式、注册班级、注册学期。注册班级(A班、B班、C班)和注册学期(第一学期、第二学期)见表。主键是一个自动递增的数字,但所有学生都获得一个学校ID号(ParticipantID)。
查询名称&第二学期A班学生地址( SELECT name, address FROM ParticipantMaster WHERE EnrClass = "Class A" and EnrSem = "Semester 2"
)。查询成功
DailySessionLog是一个表,表示每个日常类。包括日期、讲师姓名(从列表中查看)、讨论主题(从列表中查看)等字段。
现在我想将DailySessionLog链接到Query1—让我每天检查一个学生当天是否有无,部分,一半或完整的会话。我有麻烦链接这些和创建一个子表单。任何帮助吗?
我尝试在DailySessionLog中有一个ParticipantID字段,我链接到Query1中的ParticipantID。它无法识别这是一对还是多对关系。如果我继续使用Access向导创建子表单,它会将Participant数据视为"高级"表单,将DailySessionLog数据视为"子"表单。我想让它反过来。
谢谢你的帮助!
要创建一对一或一对多关系,您应该将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
您打算将数据库"存储"在何处?
我认为问题是你需要另一个表:一个Particpiant_Daily_sessioN_log,它将存储每个学生参与的每日日志结果。
考虑表dailysessionlog,你不希望列出每个学生的教师姓名,主题和日期,是吗?
所以你有很多学生可能上课,一个班级可能有很多学生。这意味着你有许多对许多的问题需要解决,然后访问才能弄清楚你想做什么。
思考下面的表格:参与者(ParticipantID)类(ClassID)Session (SessionID, ClassID)班级参与人数(班级,参与者,学期,年SessionParticipants (SessionID, ClassID, ParticipantID)