Sql MS Access 2010日期范围结果不符合要求

Sql MS Access 2010日期范围结果不符合要求,sql,ms-access,report,Sql,Ms Access,Report,我正在使用此命令打开报告 DoCmd.OpenReport "fullreport_rpt", acViewReport, , _ "[Assignment] ='" & lngMyEmpID & "' AND [Start] BETWEEN DateValue(#" & Me.DateRange1_txt & "#) AND DateValue(#"

我正在使用此命令打开报告

                            DoCmd.OpenReport "fullreport_rpt", acViewReport, , _
                            "[Assignment] ='" & lngMyEmpID & "' AND [Start] BETWEEN DateValue(#" & Me.DateRange1_txt & "#) AND DateValue(#" & Me.DateRange2_txt & "#)", _
                            acDialog, OpenArgs:=Me.reporting_combo & " For " & Me.rMonthly_txt & Me.DateRange1_txt & "-" & Me.DateRange2_txt
[Start]是日期值([StartTime]),StartTime是日期时间字段

我想生成2015年5月1日至2015年5月20日的报告,但生成的报告包含2015年4月的行

图像链接是

不知道有什么问题


如有任何帮助,我将不胜感激。

正确使用DateValue:

BETWEEN DateValue(" & Me.DateRange1_txt & ") AND DateValue(" & Me.DateRange2_txt & ")", _
DateValue(“1-5-2015”)返回2015-05-01,而


DateValue(#1-5-2015#)使用您的设置返回2015-01-05,其中将包括4月的日期。

我将通过两种方式执行此操作。首先是将日期值转换为双精度值,因为JET就是这样解释日期的

DoCmd.OpenReport "fullreport_rpt", acViewReport, , _
                "[Assignment] = '" & lngMyEmpID & "' AND [Start] BETWEEN " & CDbl(Me.DateRange1_txt) & " AND " & CDbl(Me.DateRange2_txt) & _
                , acDialog, OpenArgs:=Me.reporting_combo & " For " & Me.rMonthly_txt & Me.DateRange1_txt & "-" & Me.DateRange2_txt
对来自日期控件的日期使用CDbl是非常有效的操作。如果还有其他问题,您需要使用正确的格式,Access有问题,请尝试此方法

DoCmd.OpenReport "fullreport_rpt", acViewReport, , _
                "[Assignment] = '" & lngMyEmpID & "' AND [Start] BETWEEN " & Format(Me.DateRange1_txt, "\#mm\/dd\/yyyy\#") & " AND " & Format(Me.DateRange2_txt, "\#mm\/dd\/yyyy\#") & _
                , acDialog, OpenArgs:=Me.reporting_combo & " For " & Me.rMonthly_txt & Me.DateRange1_txt & "-" & Me.DateRange2_txt

Access对“国际”日期没有任何问题,您只需正确操作即可。DateValue会这样做。@Gustav,真的吗?哇!但愿如此。DateValue-使用您的系统设置,不保证数据检索。请浏览艾伦·布朗对此的看法的链接(随我的答案提供)。对于我来说
DateValue(“1-5-2015”)
返回
01/05/2015
。在英国,它被解读为2015年5月1日,在美国,它被解读为2015年1月5日,是的,但这是你忽略的一点。DateValue就是这样设计的。DateValue将作为第一次尝试根据本地格式读取字符串。因此,DateValue不会返回“01/05/2015”,它将返回字符串“1-5-2015”中的日期值,该字符串在美国恰好是2015-01-05,而大多数其他地方,包括英国和这里,将是2015-05-01,因为它被解析为dd-mm-yyyy。如果您不知道区域设置,用字符串表示日期的唯一安全方法是使用ISO格式:yyyy-mm-dd。这将永远不会失败,并且必须在ADO中使用,其中mm/dd/yyyy失败。我同意ISO格式永远不会失败。但是,日期需要由日期文字(
#
)控制,如果日期“字符串”的月份和日期部分小于13,则该文字会使日期翻转。因此,在DateValue(&Me.DateRange1_txt&)和DateValue(&Me.DateRange2_txt&)之间的回答
将引发数据类型不匹配。重新排列,
在“&DateValue(Me.DateRange1_txt)&”和“&DateValue(Me.DateRange2_txt)
之间将不会返回您想要查看的数据。这是我的论点。我真的很感谢你的帮助,这对我来说是一个很好的学习曲线。