【问题标题】:Filter subform table with textbox使用文本框过滤子表格
【发布时间】:2017-10-30 16:50:48
【问题描述】:

我正在尝试使用文本框过滤子表单。

我有一个查询要在子表单中显示表记录,并且我有过滤表的条件,但是当我在文本框中键入以过滤子表单时,它只显示一条具有该名称的记录。我需要它来显示所有的名字。

我的查询条件如下。

Like "*" & [Forms]![frmPlanningForecast]![FETextbox].[Text] & "*"

然后我在文本框上有一个 OnChange 事件来重新查询子表单。

如上所述,我需要它来显示与我输入的内容匹配的所有记录,而不仅仅是一条。

当我在表格本身中使用过滤器选项(字段标题上的下拉框)并从那里选择过滤器时,效果很好。但我需要将它输入到文本框中。

附上的图片会告诉你我的意思,我在文本框中输入了“EQ”,但是当它们是 15 时,它只返回了 1 条记录,称为“EQ”。

【问题讨论】:

  • 它不只显示一条记录。它显示 173,因此您的过滤器无法运行。另外,在过滤器中使用 Value 属性,而不是 Text 属性。

标签: ms-access ms-access-2013


【解决方案1】:

首先在Like参数周围加上单引号:

Like "'*" & [Forms]![frmPlanningForecast]![FETextbox] & "*'" 

第二个 - Access 有一个旧错误:如果您在查询中像以前那样引用表单字段,它不会更新值,用于重新查询期间的条件,您总是会收到相同的结果。解决方法 - 用全局函数替换对字段的引用,该函数返回文本框值或为子表单动态生成 RecordSource。

全局函数示例:

Public Function GetFE() As Variable
    GetFE = [Forms]![frmPlanningForecast]![FETextbox]
End Function

将其放置在任何标准 VBA 模块中。那么您的Like 将如下所示:

Like "'*" & GetFE() & "*'" 

【讨论】:

  • 您好,谢谢您的回答。关于全局函数,我不太确定如何做最后一部分。你能帮我解决这个问题吗?
  • 更新了答案。我还删除了 [Text],感谢 @Gustav 的建议
  • 我已经按照您所说的进行了操作,但是当我运行查询时说 GetFE 未定义。任何想法为什么?
  • 看起来您将 GetFE 函数放到了表单的模块中,而不是标准中(VBA 编辑器插入->模块)。
  • 我在我的函数中使用了“Form_frmPlanningForecast.FETextbox.text”来得到这个工作,很好的解决方法,谢谢
【解决方案2】:

我找到了一个更简单的方法,只是想让其他人知道。

我没有使用标准,而是使用了以下 vba 代码。

DoCmd.ApplyFilter , (FETextbox = qryPlannedHours.LeadFE), SubFormPF

【讨论】:

  • 是的,可以,但是如果用户想使用子表单的内置过滤功能(右键单击子表单单元格或标题后),它将重置您的过滤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多