1

我可以在日期之间进行搜索,但如果我只想从开始日期及以后进行搜索。

在过去的几周里,我一直在尝试自学 VBA 和 SQL……这是一个工作进展。

If Me.tb_dateRange1 <> "" And Me.tb_dateRange2 <> "" Then

    Dim LYear As Integer
    Dim thisDate As Date

    startDate = Me.tb_dateRange1
    endDate = Me.tb_dateRange2
    LYear = Year(endDate)

    If variationNumber = 0 Then
        sqlDateRange = " WHERE " & sqlDateRange
    Else
        sqlDateRange = " AND " & sqlDateRange
    End If

    'No end date conditions
    If endDate <> "" Then
        sqlDateRange = sqlDateRange & " Between #" & startDate & "# And #" & endDate & "#"
    Else
        'thisDate = #12/12/2223#
        sqlDateRange = sqlDateRange & " >= #" & startDate & "#"
    End If

    sqlMiddle = sqlMiddle & sqlDateRange
    variationNumber = variationNumber + 1
End If
4

2 回答 2

1

您要查找大于或等于startdate 的值:

sqlDateRange = sqlDateRange & " >= #" & startDate & "#"

Access SQL 对它接受的日期格式非常特别:

sqlDateRange = sqlDateRange & " >= #" & Format(startDate, "mm/dd/yyyy") & "#"

或者,如有必要,

sqlDateRange = sqlDateRange & " >= #" & Format(startDate, "yyyy-mm-dd") & "#"

(ISO标准日期书写方式)

于 2013-07-29T12:57:31.213 回答
0

您的目标似乎是WHERE基于 2 个文本框构建一个子句,但仅适用于那些包含值的文本框。

我不理解您的代码,因此将为您提供这种方法,该方法已在 Access 2007 中使用示例表单进行了测试。

Const cstrFormat As String = "\#yyyy-mm-dd\#"
Dim strWhere As String

strWhere = vbNullString ' make it explicit
If IsDate(Me.tb_dateRange1) = True Then
    strWhere = "field_name >= " & Format(Me.tb_dateRange1, cstrFormat)
End If
If IsDate(Me.tb_dateRange2) = True Then
    ' add AND if we got something from the first text box
    If Len(strWhere) > 0 Then
        strWhere = strWhere & " AND "
    End If

    strWhere = strWhere & "field_name <= " & _
        Format(Me.tb_dateRange2, cstrFormat)
End If
If Len(strWhere) > 0 Then
    ' add WHERE
    strWhere = "WHERE " & strWhere
End If

field_name替换为您的字段名称。如果除了日期之外,您还需要评估一天中的时间,请更改格式常量。

cstrFormat As String = "\#yyyy-mm-dd hh:nn:ss\#"

我不知道您将如何使用该WHERE字符串,所以我将其显示在MsgBox.

If Len(strWhere) > 0 Then
    MsgBox strWhere
Else
    MsgBox "no dates, so no WHERE"
End If
于 2013-07-29T14:03:44.963 回答