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

时间:2014-09-28 04:57:28

标签: sql triggers ms-access-2010 constraints

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

然后,有一个标准,学生最多只能参加5门课程。因此,我可以知道在哪里以及如何包含此约束?我不知道如何使用Macro。请帮帮我!

不过,我的关系是:学生 - >注册< - 部分< - 课程

1 个答案:

答案 0 :(得分:2)

您可以使用[注册]表格中的更改前​​data macro来完成目标。

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

DCountMacro.png

这将适用于从Microsoft Access本身执行的INSERT / UPDATE操作,但不幸的是,它将失败 ... ...

  

函数'DCount'对数据宏中使用的表达式无效。

...如果我们尝试从外部程序(如C#或VB.NET应用程序)更新表。

更强大的解决方案是在Access中创建名为[CourseCountsByStudent]的已保存查询

SELECT Register.StudentID, Count(Register.CourseID) AS CountOfCourseID
FROM Register
GROUP BY Register.StudentID;

使用查询而不是DCount()函数

查找相应的计数

QueryMacro.png

这种方法适用于早期失败的情况


匹配样本数据库的附加示例

表格中的样本数据

[课程]

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

[Course_Sections]

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

[注册]

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

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

SectionCheck.png

尝试添加另一个[注册]记录,如下所示

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

将返回错误

  

学生已在“BC2402C”部分注册。