我正在开发一个简单的数据库,供学生使用 Microsoft Access 2010 注册类(class)。我有 4 个表:学生、注册、类(class)和部分(1 个类(class)可以有多个部分)。
然后,有一个标准是学生最多只能选修 5 门类(class)。因此,我可以知道在哪里以及如何包含此约束吗?我不知道如何使用宏。请帮我解决这个问题!
顺便说一句,我的关系是:学生 -> 注册 <- 部分 <- 类(class)
最佳答案
您可以通过“更改前”data macro 来实现您的目标在[注册]表上。
最简单的方法是使用 DCount()
函数来计算表中现有的行数:
这适用于从 Microsoft Access 本身内部执行的 INSERT/UPDATE 操作,但不幸的是,它将失败并显示...
The function 'DCount' is not valid for expressions used in data macros.
...如果我们尝试从外部程序(例如 C# 或 VB.NET 应用程序)更新表。
更可靠的解决方案是在 Access 中创建一个名为 [CourseCountsByStudent] 的已保存查询
SELECT Register.StudentID, Count(Register.CourseID) AS CountOfCourseID
FROM Register
GROUP BY Register.StudentID;
并使用查询而不是 DCount()
函数查找相应的计数
这种方法将在前一种方法失败的情况下发挥作用。
匹配示例数据库的其他示例
表格中的示例数据
[类(class)]
courseid course
-------- ---------------------------------------
BC2402 Data Management & Business Intelligence
[类(class)部分]
sectiontid courseid
---------- ---------
BC2402A BC2402
BC2402B BC2402
BC2402C BC2402
[注册]
studentid sectionid
--------- ---------
U1233333K BC2402C
以下数据宏代码将检查学生是否已在类(class)的其他部分注册。
尝试像这样添加另一个[注册]记录
studentid sectionid
--------- ---------
U1233333K BC2402C
U1233333K BC2402A
将返回错误
Student is already registered in section "BC2402C".
关于sql - 将记录输入 Access 表时应用约束的数据宏(触发器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081777/