访问 - 按日期过滤复选框

时间:2016-06-28 12:09:35

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

我希望有一个复选框,当勾选时,将加载的数据过滤到仅包含至少一个月的数据,直到“预期对成熟”日期为止。这是我的尝试:

Private Sub LockFilter1Chk_Click()

If Me!LockFilter1Chk = True Then
Me.RecordSource = "SELECT * FROM staff " & _
WHERE DateDiff("m", Me![Expected pair maturation], Now()) > 1 "
End If

If Me!LockFilter1Chk = Not True Then
Me.RecordSource = "SELECT * FROM Staff "
End If

End Sub

3 个答案:

答案 0 :(得分:2)

设置过滤器可能很简单:

Private Sub LockFilter1Chk_Click()

    If Me!LockFilter1Chk = True Then
        Me.Filter = "[Expected pair maturation] < DateAdd("m", -1, Date())"
        Me.FilterOn = True
    Else
        Me.FilterOn = False
    End If

End Sub

答案 1 :(得分:1)

在字符串和行连接& _之后,您需要一个新的双引号来启动新字符串。

如果您在字符串中有",则必须将其屏蔽为""

在SQL SELECT记录源中,请勿引用Me!。您正在比较表中的值,因此只使用字段名称。

一些缩进对可读性有很大帮助。

这应该更接近(不确定它是否已经满足你想要的效果)。

Private Sub LockFilter1Chk_Click()

If Me!LockFilter1Chk = True Then
    Me.RecordSource = "SELECT * FROM staff " & _
      "WHERE DateDiff(""m"", [Expected pair maturation], Now()) > 1 "

Else
    Me.RecordSource = "SELECT * FROM Staff "
End If

End Sub

答案 2 :(得分:1)

你没有提到你的问题是什么 你可以按照你的方式去做,但我会使用if then else结构:

Private Sub LockFilter1Chk_Click()
    If Me!LockFilter1Chk = True Then
       Me.RecordSource = "SELECT * FROM staff " & _ 
                         "WHERE [Expected pair maturation] < DateAdd('m', -1, Date())"
    else
       Me.RecordSource = "Staff"
    End If
End Sub

或者你可以保持记录Source不变并使用过滤器:

If Me!LockFilter1Chk = True Then
   docmd.applyfilter , "[Expected pair maturation] < DateAdd('m', -1, Date())"
else
   me.filterOn = false
end if

注意:如果引号内有引号,您也可以在中使用引号

"DateDiff('m', Me![Expected pair maturation], Now()) > 1 "