如何对 DLOOKUP() 定义的字段启用过滤?

Posted

技术标签:

【中文标题】如何对 DLOOKUP() 定义的字段启用过滤?【英文标题】:How to enable filtering on a field defined by DLOOKUP()? 【发布时间】:2013-07-10 17:00:19 【问题描述】:

我有一个基于表T 的表单TForm,设置为数据表。我的目标是在数据表中添加一个可过滤列,其中列的值是根据使用另一列值的查询计算得出的。

我尝试通过将文本框 currentBox 添加到 T 来做到这一点。 currentBox的控制源为:

=DLookUp("name","currentStatus","itemID=" & [ID])

其中[ID]T 中的一个字段,currentStatus 是对与T 相关的表的聚合查询。

我可以过滤TFormT 中的所有字段。但我无法过滤currentBox,即使它也显示为表单中的一列;单击列标题不会执行任何操作。

我猜问题是currentBox 没有绑定到T 中的字段;有没有办法解决这个问题?

【问题讨论】:

您能否在表单的记录源查询中将currentStatus 设为计算字段? 表单的记录源是表T,而不是查询。也许我可以将记录源更改为包含所有T 字段以及currentStatus 的连接查询,但是我不会失去使用表单修改T 内容的能力吗? @HansUp,刚刚试了一下,它确实为我提供了currentStatus 的可过滤版本,但正如预测的那样,T 数据不能再从TForm 修改。 【参考方案1】:

这是一个 VBA 解决方案:

    将组合框(也称为下拉)对象添加到表单标题。此下拉列表的源将是一个独立的查询,显示 Dlookup() 当前提取的所有值(名称?)并存储 itemID。在这个例子中我们称之为ObjPickName

    AfterUpdate 事件添加到ObjPickName,它将为您过滤表单(您的表单仍将基于T)。代码将类似于:

    Private Sub Combo_ObjPickName_AfterUpdate() Me.Form.Filter="[itemID]='" & Me.Combo_ObjPickName.Value & "'" Me.Form.Filteron=True End Sub

【讨论】:

【参考方案2】:

我最终解决此问题的方法是向T 添加一个字段,并在AfterUpdate() 事件期间使用来自DLookup() 调用的值更新该字段。由于该字段现在不再基于查询,因此可用于过滤表单。

【讨论】:

如果我的第一个建议在您的系统中不可用,这将是我的下一个建议。

以上是关于如何对 DLOOKUP() 定义的字段启用过滤?的主要内容,如果未能解决你的问题,请参考以下文章

我想使用 Dlookup 函数检查单个表中两个字段的重复值

如何在 REST API 上直接启用托管元数据字段的过滤器?

对 MySql 的 DLookUp 查询

在表单控件的默认值字段中使用 Dlookup

MS Access DLookup 文本字段语法问题

无法让 DLookup 函数在 Access 2013 中工作