【问题标题】:How to set a validation rule on a field in Access using SQL Query?如何使用 SQL 查询在 Access 中的字段上设置验证规则?
【发布时间】:2018-10-27 17:13:20
【问题描述】:

我正在使用 MS Access 2016 (Office 365),目前遇到问题。下面是一个演示此问题的示例。

这里我创建了一个名为NodeFamilyLink的表,它包含两个字段:NodeID和FamilyID,如下所示。

现在 NodeID 是从另一个表 NodeData 中获取的,该表由 3 个字段组成:NodeID、NodeName 和 ParentID。在此表中,所有节点的初始定义如下图所示。

现在,我想要的是在 NodeFamilyLink 表的 NodeID 列中输入一个数字时,如果我输入的 NodeID 值不包含在 NodeData 表的 ParentID 列中,那么该 NodeID 值将被视为一个有效值,其余其他值将被视为无效值。因此,我想使用查询对 NodeFamilyLink 表的 NodeID 字段应用验证规则。但问题是我没有找到在 ACCESS 中使用查询设置验证规则的选项(如下图所示)。

虽然我可以通过使用 OLE-DB API(在 VB.NET 中)进行编程来轻松实现相同的目标,但我想知道是否有任何方法可以帮助我完成任务而无需编写任何代码它。请帮忙。

【问题讨论】:

    标签: sql validation ms-access office365 ms-access-2016


    【解决方案1】:

    我认为您可能正在寻找DLookup() 函数...这允许您在另一个表中进行查询类型查找,而无需编写代码。 How do I go about using DLookup in a validation rule of a text box on a form in access

    但这里的一个重要区别是 DLookup() 函数仅在 form 级别的验证上下文中可用,而不是 table 级别。

    根据您想要使用验证的确切位置,这可能会为您提供一个可行的选项,将查询类型查找用作验证规则的一部分,而无需编写代码。

    【讨论】:

      【解决方案2】:

      您可能正在寻找CHECK 约束:

      ALTER TABLE NodeFamilyLink
      ADD CONSTRAINT myConstraintName
      CHECK (
         NOT EXISTS( SELECT 1 FROM NodeFamilyLink INNER JOIN NodeData ON NodeData.ParentID = NodeFamilyLink.NodeID)
      )
      

      请注意,这些只能通过 ADO(使用CurrentProject.Connection.Execute)添加,或者在数据库使用 ANSI-92 兼容语法时添加。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2022-11-16
        • 2021-02-06
        • 2016-01-18
        • 1970-01-01
        • 2015-12-25
        相关资源
        最近更新 更多