我可以在日期之间进行搜索,但是如果我只想从开始日期开始搜索。
过去几周我一直在努力教自己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
答案 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