如何在 MS 访问中过滤负载?

Posted

技术标签:

【中文标题】如何在 MS 访问中过滤负载?【英文标题】:how to filter on load in MS access? 【发布时间】:2014-05-29 12:34:45 【问题描述】:

双击一个值时,我需要打开一个表单。该值被传递给打开的表单。我希望表单直接过滤该值,而不是先按下按钮。我尝试在更改和加载时进行过滤,但它不起作用。加载时它不知道该值,因为它是在打开表单后添加的。 这是传递值的代码:

DoCmd.OpenForm "SubmenuRubrieken", acNormal
Forms!SubmenuRubrieken.Tv_rubrieknaam.Value = Me.Tekst14.Value

这是在 Tv_rubrieknaam 中过滤该值的代码:

 Dim filter As String
 filter = ""
 If Not IsNull(Tv_rubrieknaam) Then filter = filter & " AND rubrieknaam = '" & Tv_rubrieknaam.Value & "'"
 Me.filter = Right(filter, Len(filter) - 5)
 Me.FilterOn = True

由于某种原因,它不会在更改 Tv_rubrieknaam 的值时触发过滤器。我需要如何解决这个问题?

【问题讨论】:

【参考方案1】:

我猜,Form_Load() 事件在您设置值之前已完成(OpenForm 在设置值之前执行),因此您必须在 Textfield 或类似的OnChange() 事件中进行过滤。

更好:将Me.Text14.ValueDoCmd.OpenForm 命令作为准备好的whereCondition 或作为在On_Load 事件中带有过滤选项的OpenArgs 传递。

一个基本的例子:

我有一个 Form1,上面有一个名为 Text0 的 TextBox。 Text0 的值为 2。 我有一个 Form2,其中有一个名为 Table1 的表作为 Recordsource。 Table1 有一个名为 Field1 的列,其中包含 1 到 3 之间的数字

我需要做的就是将以下代码添加到 Form1 的模块中,当我点击 Text0 时,Form2 将被 openend 过滤到 Field1 = 2 的行

Private Sub Text0_Click()
    DoCmd.OpenForm "Form2", acFormDS, , "Field1 = " & Nz(Me!Text0, 0)
End Sub

【讨论】:

我做了onchange,但由于某种原因它不会触发。我在 OpenArgs 上做了“Tv_rubrieknaam.Value = Me.Tekst14.Value”,但它什么也没做,也没有改变 Tv_rubrieknaam 的值。打开表单时,Tv_rubrieknaam 为空。 尝试传递 ´" rubrieknaaam = " & Me!Text14.Value` 作为我建议的 whereCondition。您还可以将DoCmd.ApplyFilter 写入 On_Load 事件 - 如果它没有自动触发。顺便说一句:请问您为什么先添加“ AND”然后将其删除? 如果您想添加另一个过滤器,您只需复制该行并更改名称即可。我从我的另一个过滤器中复制了它,所以我把它留在那里。 啊,好吧。只是在这里没有意义。 它要求 tekst14 中的值的值

以上是关于如何在 MS 访问中过滤负载?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access FileDialog 过滤器在原始负载上不起作用

如何将sql查询放入ms访问报告中?

即使没有结果,如何在分组的 MS Access 报告中显示类别

SQL 和 MS 访问 - 过滤表单上的数据

如何过滤 3 个文本框,然后在 MS Access VBA 中根据它们运行报告

在 Ms 访问中创建一个建议和过滤的组合框