sql - 将记录输入 Access 表时应用约束的数据宏(触发器)

标签 sql triggers ms-access-2010 constraints

我正在开发一个简单的数据库,供学生使用 Microsoft Access 2010 注册类(class)。我有 4 个表:学生、注册、类(class)和部分(1 个类(class)可以有多个部分)。

然后,有一个标准是学生最多只能选修 5 门类(class)。因此,我可以知道在哪里以及如何包含此约束吗?我不知道如何使用宏。请帮我解决这个问题!

顺便说一句,我的关系是:学生 -> 注册 <- 部分 <- 类(class)

最佳答案

您可以通过“更改前”data macro 来实现您的目标在[注册]表上。

最简单的方法是使用 DCount() 函数来计算表中现有的行数:

DCountMacro.png

这适用于从 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() 函数查找相应的计数

QueryMacro.png

这种方法将在前一种方法失败的情况下发挥作用。


匹配示例数据库的其他示例

表格中的示例数据

[类(class)]

courseid  course
--------  ---------------------------------------
BC2402    Data Management & Business Intelligence

[类(class)部分]

sectiontid  courseid
----------  ---------
BC2402A     BC2402
BC2402B     BC2402
BC2402C     BC2402

[注册]

studentid  sectionid
---------  ---------
U1233333K  BC2402C

以下数据宏代码将检查学生是否已在类(class)的其他部分注册。

SectionCheck.png

尝试像这样添加另一个[注册]记录

studentid  sectionid
---------  ---------
U1233333K  BC2402C
U1233333K  BC2402A

将返回错误

Student is already registered in section "BC2402C".

关于sql - 将记录输入 Access 表时应用约束的数据宏(触发器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081777/

相关文章:

sql - 如何确定给定项目的字段值是否仅在增加?

sql - 重命名 MySQL 中的外键列

sql - 我想用增量值从 table1 插入值到 table2

sql - postgres 中的触发器

mysql - 数据库触发器 - 表中的最大项目

MySQL: INSERT INTO ... ON DUPLICATE KEY UPDATE 不触发 AFTER UPDATE 触发器

MySQL加入更新: Updating join table row twice

java - 使用什么数据库?

validation - 如何在没有输入掩码的情况下验证允许 0.5 或 .0 的数字的子数字值?

java - 如何将 UCanAccess 连接到使用数据库密码加密的 Access 数据库?