access/sql:如何检查表中的所有重复项(同一日期)除一个值外是否都是0?

lyfkaqu1  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(365)

我在access中有一个表(tblexample),它由id、tripid、day和value字段组成。
此表由窗体编辑。当用户关闭表单时,access应该验证所做的输入。一天中有多条相同日期的记录是可以的。但是…如果同一日期有多条记录,则只有一条记录的值不能为0。我怎样才能查到那个?
我的想法是:创建一个查询,返回所有不满足上述要求的记录。然后让vba检查查询是否为空。如果不为空,则显示错误消息框。这样的查询在sql中是什么样子的?如果查询不返回任何记录,如何签入vba?
也许我的想法太复杂了。有没有更简单的检查方法?

y0u0uwnf

y0u0uwnf1#

大多数数据库都有实现这一点的工具——可以使用过滤的唯一索引,也可以使用基于表达式的唯一索引。
ms access不提供此类功能。基本上你有两个选择:
首先是创建触发器——两者都是 update 以及 insert 触发器——验证数据的触发器。触发器的优点是它们加强了数据库中数据的正确性。缺点是很难维护。
第二种方法是在插入或更新数据时在应用程序级别进行检查。这可能是ms-access中最简单的方法。
基本上,你会检查:

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

如果返回的值大于 0 ,则不要 insert / update 返回一个错误。
我会注意到这不是线程安全的。也就是说,两个不同的用户可能会同时插入非零值。我将添加一个编辑评论:如果您担心这样的事情(并发问题非常重要),那么您应该使用比msaccess更复杂的数据库。

相关问题