如何对 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
相关的表的聚合查询。
我可以过滤TForm
中T
中的所有字段。但我无法过滤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() 定义的字段启用过滤?的主要内容,如果未能解决你的问题,请参考以下文章