在以下公式中留空时,如何使日期条件显示所有记录?

How can I make the date criteria show all records when left blank in the following formula?

我制作了一个搜索表单,允许用户在公司费用报告中搜索某些客户、项目、员工和日期范围。

对于日期条件框,我有以下公式:

Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]

这很好用,但如果我不输入任何日期,则不会显示任何记录,我想更改此设置,以便在留空时显示所有记录。

我已经能够使用以下公式对项目、客户和员工字段执行此操作:

Like "*" & [Forms]![Search Form]![cboProject] & "*"
Like "*" & [Forms]![Search Form]![cboClient] & "*"
Like "*" & [Forms]![Search Form]![txtEmployee] & "*"

你们可能确切地知道这意味着什么,但无论如何我还是会简要解释一下:当我在 Employee 的文本框中、Project 的组合框或 Client 的组合框中输入内容时,我搜索和 运行 查询,只显示与我输入的值匹配的值。 Like "*" 位使得如果没有输入任何值,所有值都会显示出来。

我想对日期范围做同样的事情,但这对我来说有点棘手,谁能帮我解决这个问题的语法,让我的日期开始和结束日期框在留空时显示所有内容?因为现在如果我将它们留空,则不会显示任何记录,这对用户端来说是一个巨大问题。

我试过:

Like "*" & (Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]) & "*"

但它对我不起作用,当我输入日期范围时,查询中会出现不正确的日期范围。

正确的写法是什么?

txtDateFromtxtDateTo 都包含非 Null 值时,听起来您的查询 returns 是正确的行。

但是当 txtDateFromtxtDateTo 为 Null 时,您希望返回所有行。在这种情况下,您可以在 WHERE 子句中添加 2 个条件:

WHERE
       your_date_field Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]
    OR [Forms]![Search Form]![txtDateFrom] Is Null
    OR [Forms]![Search Form]![txtDateTo] Is Null
Dim A As String

Dim B As String

Dim p As String

A = Nz(Forms!frmsearchInv!txtDateFrom, "1")

B = Nz(Forms!frmsearchInv!txtDateFor, "1")

If A = "1" Then

A = "0000-01-01"

End If

If B = "1" Then

B = "9999-01-01"

End If

  p = "select * from orders where [orderDate] >= #" & A & "# AND [orderDate] <=#" & B & "# "