【发布时间】: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 欢迎你 :)