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

时间:2014-05-29 12:34:45

标签: ms-access vbscript

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

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 个答案:

答案 0 :(得分:0)

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

更好:使用Me.Text14.Value命令将DoCmd.OpenForm作为准备好的whereCondition或OnAoad事件中带有过滤选项的OpenArgs传递。

一个基本的例子:

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

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

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