【问题标题】:Enable/Disable Form List Field based on record attribute in parent table根据父表中的记录属性启用/禁用表单列表字段
【发布时间】:2017-01-03 18:04:23
【问题描述】:

我的数据库中有两个表:Add_New_Initiative 和 Add_Risk

Add_New_Initiative 和 Add_Risk 之间存在 1:M 的关系。

当通过 Add_Risk 表单添加风险时,用户必须从下拉组合框中选择相关的 Initiative_ID。

根据该选择,将启用或禁用 Add_Risk 表单中名为 Risk_Area 的值列表。为了确定这一点,我需要按 Initiative_ID 查找记录,并查看用户之前在 Add_New_Initiative 表单中为标题为 Tier 的值列表选择的答案。

从逻辑上讲,我认为它是这样发展的:

  1. 如果 Add_Risk 表单上的 Initiative_ID 为 Null,则 Risk_Area 将被禁用。
  2. 如果 Add_Risk 表单上的 Initiative_ID 不为空,则在 Add_New_Initiative 表单上查找具有用户在 Add_Risk 表单上输入/选择的 Initiative_ID 的记录的 Tier 值。
  3. 如果层级为 1 或 2,则将在 Add_Risk 表单上启用 Risk_Area。
  4. 如果层级为 3 或 Null,则在 Add_Risk 表单上将禁用 Risk_Area。

在 VBA 中编码时,我将如何引用存储在其他表单/表中的层值?

【问题讨论】:

  • 您的问题在哪里?题中的Mysql标签有什么作用?
  • 实际问题会有所帮助。我很抱歉。我已经添加了。
  • Risk_Area.enabled = (tier = 1 or tier=2)?

标签: forms ms-access vba ms-access-2013


【解决方案1】:

根据问题,您在查找/引用其他表中的数据时遇到问题。
执行 dlookup 以查找表/查询中的特定值。

dim VarTier as integer
VarTier = nz(Dlookup("Tier","Add_New_Initiative","Initiative_ID=" & me.Initiative_ID.value),-1)

Dlookup 将返回:

  1. 如果没有找到符合条件的记录,则为 Null,由 nz 处理,从而使 VarTier 变为 -1,因此您可以使用 if 语句来处理它。
  2. 如果找到 Initiative_ID 等于 Add_Risk 表单的记录,它将返回该记录的 Tier 值。

然后您将不得不将查找结果与简单的 if 进行比较。

If Vartier = 1 or VarTier = 2 then
    me.list.enabled = true
End If

在此处了解有关 Dlookup 的更多信息。
https://msdn.microsoft.com/es-es/library/office/ff834404(v=office.15).aspx

【讨论】:

  • Private Sub Initiative_ID_AfterUpdate() Dim varTier As Integer varTier = Nz(DLookup("Tier", "New Initiatives", "Initiative_ID = " & Me.Initiative_ID.Value), -1) If varTier = 1 Or varTier = 2 Then Me.Risk_Area.Enabled = True Else Me.Risk_Area.Enabled = False End If End Sub
  • 我在 End If 之前添加了一个Else me.list.enabled = false,它总是禁用列表。如果我交换启用/禁用,它总是启用列表。我认为这意味着 varTier 总是返回 -1 并且没有捕获 Tier 字段的值。有什么建议吗?
  • 你的猜测是 99% 正确的。 Dlookup 未找到匹配记录并返回 null。在 Dlookup 中仔细检查参数是否写得很好。 Tier 应该与表 New Initiatives 中的字段名称完全相同。此外,如果 Initiative_ID 是文本,则 me.Initiative_ID.value 应该用单引号括起来。
  • 绝对是语法错误。倡议 ID 字段不包含下划线,但我将它包含在 VBA 中。将其更改为周围带有 [ ] 的空间有效。感谢您的帮助。
猜你喜欢
  • 2019-04-20
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多