我有一个相当标准的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。如果您希望规则由架构强制执行,则需要查看数据宏。或者,您可以在所有者上添加一个指向主代理的字段,而不是在代理上使用标志,但这也需要自己的验证。