使用文本框过滤连续形式

时间:2013-11-13 19:36:54

标签: vba ms-access access-vba ms-access-2010

我需要让用户使用用户输入文本框的值来过滤连续表单。连续形式也嵌套在几个级别的导航子表单中。这听起来很容易,但我在网上找到的所有示例都使用宏而不是vba。

我设置了结构并为文本框txtFilter编写了一个AfterUpdate过程,如下所示:

Private Sub txtFilter_AfterUpdate()
    Dim filterval As String
    filterval = txtFilter.Value
    With Forms!Main!NavigationSubform.Form!NavigationSubform.Form
        .Filter = "LastName Like " & filterval
        .FilterOn = True
    End With
End Sub

我玩过不同的语法,但似乎都没有正常工作。以下是从文件共享站点下载数据库相关部分的链接:http://jmp.sh/v/HGctZ4Ru74vDAjzN43Wq

有人可以告诉我如何改变这一点,以便用户可以使用文本框过滤连续表单吗?

2 个答案:

答案 0 :(得分:2)

我使用它来实现它:.Filter = "LastName Like """ & filterval & """"

有时甚至需要那些烦人的字符串标识符。

好的,要让表单打开而没有记录,然后只提取你(或用户)指定的记录最简单,只需要一些重新工作。 (我建议您使用副本而不是原件) 1:在您的连续表格上,删除Recordsource;我们将使用Late Binding(Kinda) 2:然后删除txtFilter框下的代码,然后删除框本身。 3:添加一个类似于此的组合框作为记录源: SELECT DISTINCT myTable.LastName FROM myTable ORDER BY myTable.LastName;(这将为您提供一个唯一的姓氏列表,因此无需知道如何拼写该名称,并且确保至少有一个匹配) 4:在该组合框的After Update事件中,添加如下代码:

Dim strSource As String
strSource = "SELECT mt.IntakeNumber, mt.ClientNumber, " & _
    "mt.LastName, mt.FirstName, mt.ConsultationDate " & _
    " FROM myTable mt " & _
    "WHERE (mt.LastName)= '" & Me.cboFilter.Value & "'"

Me.RecordSource = strSource
Me.Requery

显然你需要根据需要更改表格和字段名称,但希望你明白这一点。

答案 1 :(得分:1)

Option Compare Database
Option Explicit '<- always include this!!!!!

Private Sub txtFilter_AfterUpdate()
    Dim strFilter As String

    ' only set Filter when text box contains something
    ' to search for ==> don't filter Null, empty string,
    ' or spaces
    If Len(Trim(Me.txtFilter.Value & vbNullString)) > 0 Then
        strFilter = "LastName Like '*" & _
            Replace(Me.txtFilter.Value, "'", "''") & _
            "*'"
        ' that Replace() prevents the procedure from breaking
        ' when the user enters a name with an apostrophe
        ' into the text box (O'Malley)
        Debug.Print strFilter ' see what we built, Ctrl+g
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        ' what should happen here?
        ' maybe just switch off the filter ...
        Me.FilterOn = False
    End If
End Sub