Access 中的组合过滤无法正常工作

Posted

技术标签:

【中文标题】Access 中的组合过滤无法正常工作【英文标题】:Filtering with combo in Access not working properly 【发布时间】:2019-02-06 08:27:47 【问题描述】:

我一直在尝试使用组合框过滤 SQL 查询的结果。我需要使用 AfterUpdate() 来完成它,因为我需要它来显示所有结果(未过滤),然后,如果需要,可以根据组合框的内容进行过滤。

这里“Cuadro_combinado30”是组合框的名称,“Dossier”是我要过滤的字段的名称。

Private Sub Cuadro_combinado30_AfterUpdate()

Dim strFilter As String

With Me.Cuadro_combinado30
    If IsNull(.Value) Or .Value = "**ALL**" Then
       ' If the combo box is cleared or ALL selected, clear the form filter.
       Me.Filter = vbNullString
       Me.FilterOn = False
    Else
        ' item other than ALL is selected, filter for an exact match.
        strFilter = "[Dossier] = '" & _
            Replace(.Value, "'", "''") & "'"
        Debug.Print strFilter ' check this in Immediate window in case of 
        ' trouble you can use Ctrl+g to go to the Immediate window
        Me.Filter = strFilter
        Me.FilterOn = True
    End If
    End With

End Sub

到目前为止,结果是当我输入表单时,所有结果都显示出来了,但是当我选择组合框的一个选项以过滤结果时,查询似乎没有找到任何结果结果显示出来了。

为什么这段代码不起作用,我应该修改什么才能让它起作用?

谢谢。

更新:我尝试使用文本框而不是组合框,并且它有效,当我在文本框中键入内容时,结果会根据我刚刚写的内容进行过滤。我想这与组合框的创建方式有关,似乎即使组合框显示内容,过滤器也会在其上找到 NULL。

【问题讨论】:

组合是否有几列? 不,在向导上创建时,它只显示一列数据,这是应该的,我认为这可能与向导的最后阶段有关,当它询问要做什么时处理该值,要么记住该值,要么将其存储在其他地方。 试试Replace(.Column(1), "'", "''") 非常感谢你们两位,替换第 1 列效果很好。问题已解决,但我想知道无论如何,在尝试@Santosh solotuion 之前,我尝试在属性上将列数设置为 1,但随后表单上的组合变为空,这是为什么呢?跨度> @ALawliet 欢迎你 :) 【参考方案1】:

原来组合框有 2 列而不是 1 列,@Santosh 解决方案完美运行:

 Replace(.Column(1), "'", "''")

【讨论】:

【参考方案2】:

将组合属性更改为一列应该可以解决问题

【讨论】:

以上是关于Access 中的组合过滤无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

VBA for Access 中的 Code 128 条码无法正常工作

如何在 Access VBA 中使用 like

在 microsoft access 中使用组合框过滤表单结果

在 ms-Access 中使用组合框创建搜索表单

MS Access 数据表不会根据组合框更新

MS Access 2016 VBA 在组合查询条件中为空