访问 - 使用复选框按日期过滤

问题描述 投票:0回答:4

我想要一个复选框,当它被选中时,它会过滤加载的数据以仅包含距离“预期对成熟”日期至少一个月的数据。这是我的尝试:

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
ms-access vba ms-access-2010
4个回答
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
投票

字符串和行连接后

& _
你需要一个新的双引号来开始新的字符串。

如果字符串中有

"
,则必须将其屏蔽为
""

在 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

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

或者您可以保留记录来源不变并使用过滤器:

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

注意:如果引号中有引号,也可以使用引号inside

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

-1
投票

我可以同时使用吗? 1 个带有 recordsource 的过滤器比带有 filteron 的结果?谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.