【问题标题】:Validation for 1:m relationship where only one related record can have yes/no field = True验证 1:m 关系,其中只有一个相关记录可以具有是/否字段 = True
【发布时间】:2018-03-09 20:23:13
【问题描述】:

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

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

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

每个资产有一个代理,每个代理属于一个所有者。但是,一个 OWNER 可以有多个 AGENT。我们要为每个 OWNER 识别主要的 AGENT(联系人),这与识别哪个 AGENT 负责哪个 ASSET 是分开的。 因此,我在 AGENT 表中包含了一个“OWNER_PRIMARY_AGENT”是/否字段。只有一个与每个 OWNER 相关的 AGENT 应勾选此项。但是,我不确定如何在验证/表达式方面执行此操作。

任何想法都非常感谢!

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    您可以使用以下表达式向复选框添加验证规则:

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

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

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

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

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

    【讨论】:

    • 非常感谢!我试试看。
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多