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 不提供此类功能。基本上你有两个选择:
首先是创建触发器——update
和 insert
触发器——来验证数据。触发器的优点是它们强制数据库中的数据正确。缺点是难以维护。
第二个是在插入或更新数据时在应用程序级别进行检查。这可能是 MS Access 中最简单的方法。
基本上,你会检查:
select count(*)
from tblExample
where day = @day and value > 0;
如果这个returns的值大于0
,那么就不要insert
/update
table,返回错误。
我会注意到这不是线程安全的。也就是说,两个不同的用户最终可能会同时插入非零值。我将添加一个编辑评论:如果您担心这些事情(并且并发问题非常重要,需要担心),那么您应该使用比 MS Access 更复杂的数据库。
我在 Access (tblExample) 中有一个 table,它由字段 ID、tripID、日期和值组成。
这个table是用表单编辑的。当用户关闭表单时,Access 应该验证所做的输入。同一天有多个记录是可以的。但是......如果同一日期有多个记录,则只有一个可以具有 0 以外的值。我如何让 Access 进行检查?
我的想法:创建一个查询,其中 returns 所有不满足上述要求的记录。然后让 VBA 检查查询是否为空。如果它不为空,则显示错误消息框。这样的查询在 SQL 中会是什么样子?如果该查询 returns 没有记录,我如何签入 VBA?
可能是我的想法太复杂了。有没有更简单的检查方法?
大多数数据库都可以轻松地做到这一点——使用过滤的唯一索引或基于表达式的唯一索引。
MS Access 不提供此类功能。基本上你有两个选择:
首先是创建触发器——update
和 insert
触发器——来验证数据。触发器的优点是它们强制数据库中的数据正确。缺点是难以维护。
第二个是在插入或更新数据时在应用程序级别进行检查。这可能是 MS Access 中最简单的方法。
基本上,你会检查:
select count(*)
from tblExample
where day = @day and value > 0;
如果这个returns的值大于0
,那么就不要insert
/update
table,返回错误。
我会注意到这不是线程安全的。也就是说,两个不同的用户最终可能会同时插入非零值。我将添加一个编辑评论:如果您担心这些事情(并且并发问题非常重要,需要担心),那么您应该使用比 MS Access 更复杂的数据库。