在表单过滤器中使用OR

时间:2019-01-08 21:03:31

标签: ms-access access-vba

我的目标是获取人名与过滤器匹配,销售月份匹配或付款月份匹配的记录。

我的过滤器为我提供了所有人的结果,而不是按“人名”进行过滤。

If Not IsNull(Me.Filter3) Then
    strWhere = strWhere & "([PERSONNAME] Like ""*" & Me.Filter3 & "*"") AND "
End If
If Not IsNull(Me.Filter4) Then
    strWhere = strWhere & "([SaleMonth] Like ""*" & Me.Filter4 & "*"") OR "
End If
If Not IsNull(Me.Filter5) Then
    strWhere = strWhere & "([PAIDMONTH] Like ""*" & Me.Filter5 & "*"") AND "
End If

2 个答案:

答案 0 :(得分:0)

需要围绕两个OR条件的一对括号(不需要所有原始括号)。这意味着如果您只想提供一个OR条件,则需要更多的条件代码。既然您将LIKE与通配符一起使用,为什么还要打扰条件语句呢?我更喜欢撇号定界符。

strWhere = "[PERSONNAME] Like '*" & Me.Filter3 & "*' AND ([SaleMonth] Like '*" & Me.Filter4 & "*' OR [PAIDMONTH] Like '*" & Me.Filter5 & "*')" 

再三考虑,这可能对OR无效。如果条件仅使用AND,那么它将使用。试试:

If Not IsNull(Me.Filter3) Then
    strWhere = strWhere & "[PERSONNAME] Like '*" & Me.Filter3 & "*' AND "
End If
If Not IsNull(Me.Filter4) And Not IsNull(Me.Filter5) Then
    strWhere = strWhere & "([SaleMonth] Like '*" & Me.Filter4 & "*' OR [PAIDMONTH] Like '*" & Me.Filter5 & "*') AND "
ElseIf Not IsNull(Me.Filter4) Then
    strWhere = strWhere & "[SaleMonth] Like '*" & Me.Filter4 & "*' AND "
ElseIf Not IsNull(Me.Filter5) Then
    strWhere = strWhere & "[PAIDMONTH] Like '*" & Me.Filter5 & "*' AND "
End If

答案 1 :(得分:0)

看起来很混乱,我认为您可能需要执行以下操作,以确保括号在所有情况下都是正确的,并考虑到Null和{{1}的所有可能组合},同时保持正确的SQL:

Not Null

但是,请注意,以这种方式构造SQL代码当然可以进行SQL注入。