验证 1:m 关系,其中只有一个相关记录可以具有是/否字段 = True



我有一个相当标准的Access数据库,分为不同的表,数据输入以一系列形式完成。到目前为止,在数据验证、功能/事件流程等方面一切正常。

我遇到了最后一个问题,我觉得应该很容易解决,但我被卡住了。

让我们调用其中一个表 ASSET,它保存属性记录。然后是另一个名为 AGENT 的表,其中包含负责属性的联系人列表。然后是另一个称为 OWNER 的表,其中包含拥有资产的组织列表(通过代理关联以避免重复关系)。

每个资产都有一个代理,每个代理属于一个所有者。但是,所有者可以有许多代理。我们希望为每个所有者确定主要代理(联系人),这与确定哪个代理负责哪个资产是分开的。 因此,我在 AGENT 表上包含一个"OWNER_PRIMARY_AGENT"是/否字段。只有一个与每个所有者相关的代理应该勾选。但是,我不确定如何在验证/表达式方面强制执行这一点。

任何想法非常感谢!

您可以使用以下表达式将有效性规则添加到复选框:

(DCount("*","Agents","IsPrimary=Yes and OwnerID=" & [OwnerID])+IIf([IsPrimary],1,0))<=1

看起来很令人发指,但它的作用是:

  • 计算此所有者的主要代理数量(它假定当前表单上有一个所有者 ID 字段 - 即代理表单)。
  • 如果选中该复选框,则加 1。
  • 确保总和不超过 1。

添加一个不错的ValidationText,它将强制执行每个所有者只有一个主要代理机构的规则。

编辑:注意:这会将规则应用于 UI。如果您希望规则由架构强制执行,则需要查看数据宏。或者,您可以在所有者上添加一个指向主代理的字段,而不是在代理上使用标志,但这也需要自己的验证。

最新更新