如何在 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.Value
与DoCmd.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 过滤器在原始负载上不起作用
即使没有结果,如何在分组的 MS Access 报告中显示类别