我正在尝试打开一个报表,其中包含两个日期(dateFrom& dateTo)之间的日期字段,该日期来自表单中的文本框。
dateFrom = Forms!formOptions!txtDateFrom.Value
dateTo = Forms!formOptions!txtDateTo.Value
尝试过:
(编辑:)
在dateFrom和dateTo变量
周围有和没有'#'&安培;有和没有[]围绕字段名称,仍然无法得到 这个工作。
当我尝试这段代码时:
strCriteria = "[ActionTime] >= '" & dateFrom & "' And [ActionTime] <= '" & dateTo & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria
将弹出“输入参数值”对话框,我已检查报告的控制源&amp;字段名称是正确的&amp;也没有发生排序或分组。
当我在上面的代码中围绕字段名称添加一对额外的''时:
strCriteria = "'[ActionTime]' >= '" & dateFrom & "' And '[ActionTime]' <= '" & dateTo & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria
报告正常打开,但不是仅显示日期之间的记录,而是显示所有记录。
还尝试过使用WhereCondition:
DoCmd.OpenReport "reportLog", acViewReport, , WhereCondition:="'[ActionTime] >= #" & dateFrom & "# AND [ActionTime] <= #" & dateTo & "#'"
报告正常打开,但包含所有记录,而不是关注WhereCondition。
我不知道这个编码的哪个部分是错误的,已经提到了其他网站,但仍然无法检测出什么是错误的。将不胜感激任何指导。提前致谢。
答案 0 :(得分:2)
共享尝试无效。第一个,因为日期应该以特定方式(YYYY-MM-DD或MM / DD / YYYY)格式化并被#
包围(值,而不是字段名称)。第二个,因为您将文字字符串'[ActionTime]'
与包含日期的字符串进行比较,这不是一件非常明智的事情。
但是,简单而安全的方法就是设置参数:
strCriteria = "[ActionTime] >= dateFrom And [ActionTime] <= dateTo"
DoCmd.SetParameter "dateFrom", dateFrom
DoCmd.SetParameter "dateTo", dateTo
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria
详细了解如何使用参数here。
答案 1 :(得分:1)
您的日期值需要格式正确的字符串表达式:
Dim dateFrom As Date
Dim dateTo As Date
dateFrom = DateValue(Forms!formOptions!txtDateFrom.Value)
dateTo = DateValue(Forms!formOptions!txtDateTo.Value)
strCriteria = "[ActionTime] >= #" & Format(dateFrom, "yyyy\/mm\/dd") & "# And [ActionTime] <= #" & Format(dateTo, "yyyy\/mm\/dd") & "#"
Debug.Print "'" & strCriteria & "'"
DoCmd.OpenReport "reportLog", acViewReport, , strCriteria
编辑:如果ActionTime出现多次,请尝试:
strCriteria = "[reportLog].[ActionTime] >= #" & Format(dateFrom, "yyyy\/mm\/dd") & "# And [reportLog].[ActionTime] <= #" & Format(dateTo, "yyyy\/mm\/dd") & "#"