如何从开始日期和结束日期搜索?

时间:2013-07-29 12:27:16

标签: sql vba ms-access

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

过去几周我一直在努力教自己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

2 个答案:

答案 0 :(得分:1)

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

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

Access SQL非常特别关于它将接受的日期格式:

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

或者,如有必要,

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

(ISO标准日期符号)

答案 1 :(得分:0)

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

我不理解您的代码,因此将为您提供此方法,该方法已在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