我正在创建一个数据库来跟踪学生参与课程。这就是我到目前为止所建立的。我在Access 2007中工作。
参与者主表 - 姓名,联系信息,注册课程,注册学期。注册课程(A班,B班,C班)和注册学期(第1学期,第2学期)在表格中定义。主键是自动增量号,但学生都获得学校ID号(ParticipantID)。
Query1拉取名称&注册A级,第二学期的学生的地址
(SELECT name, address FROM ParticipantMaster WHERE EnrClass = "Class A" and EnrSem = "Semester 2"
)。查询有效。
DailySessionLog是表示每日课程的表格。包括日期字段,教师姓名(从列表中查看),讨论主题(从列表中查看)。
现在我想将DailySessionLog链接到Query1 - 让我每天检查当天是否有学生参加无,部分,半场或全场比赛。我无法链接这些并创建子表单。有什么帮助吗?
我尝试在DailySessionLog中有一个ParticipantID字段,我在Query1中链接到ParticipantID。它无法识别它是否是一个:一个或多个关系。如果我继续使用Access向导创建子表单,则将Participant数据视为“更高”表单,将DailySessionLog数据视为“子”表单。我希望它是另一种方式。
感谢您的帮助!
答案 0 :(得分:1)
您希望数据库在哪里“存储”参与?
我认为问题是您需要另一个表:Particpiant_Daily_sessioN_log,它会存储每个学生参与的每日日志的结果。
考虑一下dailysessionlog表,你不希望为每个学生列出教师姓名,主题和日期吗?
所以你有很多学生可以上课,一个班可能有很多学生。这意味着在访问可以确定您想要做什么之前,您需要解决许多问题。
考虑以下表格: 参与者(ParticipantID) 类(ClassID) 会话(SessionID,ClassID) ClassParticipants(ClassId,ParticipantID,Semester,year SessionParticipants(SessionID,ClassID,ParticipantID)
答案 1 :(得分: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