让我们尝试正确地表达这一点,这是我相关表格的摘要:
- 包含 student_id、first_name、last_name 的表“students”。
- 包含 course_id、标题的表“课程”。
- 包含major_id、major_name 的表“专业”。
学生被分配到专业,课程被分配到专业(即获得特定专业所需的课程),因此,我有以下两个表格来定义哪些学生和课程被分配到哪些专业。
- 包含 ref_id (PK)、student_id (FK)、major_id (FK) 的表“students_assigned_majors”。
- 包含 ref_id (PK)、course_id (FK)、major_id (FK) 的表“courses_assigned_majors”。
最后,我有一张名为 6.“completed_courses”的表,其中包含有关哪些学生完成了哪些课程的信息,列有 ref_id (PK)、student_id (FK)、course_id (FK)、completion_date。
我想创建一个查询来检查哪些学生没有资格从该专业毕业,因为他们错过了该专业要求的课程。如果任何课程在 5 年前完成,则该课程无效。
我想在现有表格上显示这些学生及其专业。
我不确定这是否可以完全在 MS Access SQL 中完成......我在相关表单的 On_current 事件上起草了一个 VBA 过程,现在它看起来像这样:(仍然没有测试伪代码,但这里是主意)
Private Sub Form_Current(major_parameter as String)
Dim Sql_cour As String
Dim Sql_stud As String
Dim db As Database
Dim rs_courses As DAO.Recordset
Dim rs_students As DAO.Recordset
Set Sql_cour = "SELECT course_id FROM courses_assigned_major WHERE major_id = {major_parameter};"
Set Sql_stud = "SELECT student_id, first_name, last_name FROM students_assigned_majors as SAM LEFT OUTER JOIN students as S on (SAM.student_id = S.student_id) WHERE SAM.major_id = {major_parameter};"
Set rs_courses = db.OpenRecordset(Sql_cour)
Set rs_students = db.OpenRecordset(Sql_stud)
Do While Not rs_students.EOF
Do While Not rs_courses.EOF
'check completed_courses table for student_id, course_id, date of course < 5 years ago
'If conditions not met
'Add student to new query/table "not_eligible"
Exit inner Loop
rs_courses.MoveNext
Loop
rs_students.MoveNext
Loop
End Sub
我正在寻找有关实现此目标的最佳方法的一般建议,如果根据您的经验,这个草拟的解决方案值得投入时间来完成,或者如果我完全偏离轨道。
更具体地说,如果这是要走的路,一些进一步的不确定性是:
- 我在哪里存储这个子程序?将其存储在表单的当前事件中是否可以?
- 我在哪里存储不符合要求的学生的价值观?我稍后想在表单上显示?
感谢您的帮助,希望能提供一个有趣的挑战。问候