2012-04-16 53 views
0

我有一个组合框,可以在afterupdate事件中过滤表单上的数据。 以下是我一直试图用来过滤数据的查询。此代码有效地过滤数据,但是我面临的问题是,当我从组合框中选择“”时,没有显示数据。什么可能是错误的?我怎么能显示上的选择表格的所有数据“”如何在MS Access 2007中清除从组合框中选择值的过滤?

Dim strCriteria As String 
strCriteria = "[Jobno]='" & cboPMNO & "'" 
Set rst = Me.RecordsetClone 
If strCriteria = "<ALL>" Then 
Me.FilterOn = False 
ElseIf rst.NoMatch Then 
MsgBox "No entry found" 
Else 
Me.FilterOn = False 
Me.Filter = strCriteria 
Me.FilterOn = True 
End If 
+0

cboPMNO的行来源是什么? – Fionnuala 2012-04-16 11:27:55

+0

有一些问题。当我选择使用双引号括起来的时,我输入了一个问题,而不是简单的“”。使用双引号括起来使它成为我猜的块引用。 – user1175126 2012-04-17 03:16:15

+0

从tblmimain选择不同''作为Jobno UNION ALL SELECT DISTINCT tblMIMAIN.A_JOBNO AS Jobno FROM tblMIMAIN WHERE(((tblMIMAIN.A_LOCATION)> IIf(GetAsset()=“** ALL **”,“a”,“ZZ “)或(tblMIMAIN.A_LOCATION)= GetAsset())AND((tblMIMAIN.A_SYSTEM)=”NEN“)); 我认为,而不是如果strCriteria =“”我应该使用如果cboPMNO =“” – user1175126 2012-04-17 03:26:46

回答

0

试试这个:

Dim strCriteria As String 
strCriteria = "[Jobno]='" & Nz(cboPMNO, "<ALL>") & "'" 
Set rst = Me.RecordsetClone 
If strCriteria = "<ALL>" or strCriteria = "" Then 
    Me.Filter = "" 
    Me.FilterOn = False 
ElseIf rst.NoMatch Then 
    MsgBox "No entry found" 
Else 
    Me.Filter = strCriteria 
    If Me.FilterOn = False Then Me.FilterOn = True 
End If 

以下是我通常会写这种过滤器。除非绝对必要,否则我强烈反对消息框。在我看来,如果没有匹配,最好只显示空白表单或列表框。

Dim strCriteria as String 
If Nz(Me.cboPMNO, "<ALL>") <> "<ALL>" Then 
    strCriteria = "[Jobno] = '" & Me.cboPMNO & "'" 
End If 
If strCriteria <> "" Then 
    Me.Filter = strCriteria 
    If Me.FilterOn = False Then Me.FilterOn = True 
Else 
    Me.Filter = "" 
    Me.FilterOn = False 
End If 
+0

我只是想知道你将如何获得'strCriteria =“”' – Fionnuala 2012-04-16 13:47:08

+0

这完全取决于如何编程组合框。您可以允许空白条目。退格所有字符将导致它为零长度的字符串。但是你是对的,对于永远不会发生的事情,这可能是过度的保护。 – HK1 2012-04-16 13:55:15

+0

此外,OP说:'我面临的问题是,当我从组合框中选择“”时,看起来他有零长度字符串的问题,除非我误解了(这很可能)。 – HK1 2012-04-16 13:56:21