Access/SQL:如何检查 table 中所有重复项(同一日期)的值是否为 0,只有一个除外?

Access/SQL: How can I check if in a table all duplicates (same date) have a value of 0 except one?

我在 Access (tblExample) 中有一个 table,它由字段 ID、tripID、日期和值组成。

这个table是用表单编辑的。当用户关闭表单时,Access 应该验证所做的输入。同一天有多个记录是可以的。但是......如果同一日期有多个记录,则只有一个可以具有 0 以外的值。我如何让 Access 进行检查?

我的想法:创建一个查询,其中 returns 所有不满足上述要求的记录。然后让 VBA 检查查询是否为空。如果它不为空,则显示错误消息框。这样的查询在 SQL 中会是什么样子?如果该查询 returns 没有记录,我如何签入 VBA?

可能是我的想法太复杂了。有没有更简单的检查方法?

大多数数据库都可以轻松地做到这一点——使用过滤的唯一索引或基于表达式的唯一索引。

MS Access 不提供此类功能。基本上你有两个选择:

首先是创建触发器——updateinsert 触发器——来验证数据。触发器的优点是它们强制数据库中的数据正确。缺点是难以维护。

第二个是在插入或更新数据时在应用程序级别进行检查。这可能是 MS Access 中最简单的方法。

基本上,你会检查:

select count(*)
from tblExample
where day = @day and value > 0;

如果这个returns的值大于0,那么就不要insert/updatetable,返回错误。

我会注意到这不是线程安全的。也就是说,两个不同的用户最终可能会同时插入非零值。我将添加一个编辑评论:如果您担心这些事情(并且并发问题非常重要,需要担心),那么您应该使用比 MS Access 更复杂的数据库。