在Access中,我有一个包含日期时间字段的报表。有一个表单用于收集查询的用户输入,具体地说就是查询的From
和To
日期。
使用以下代码打开报告:
Dim str as String
str = "DateCreated BETWEEN #" & format(From_Date.value, "yyyy-mm-dd") & "# AND #" & DateAdd("d", 1, format(To_Date.value, "yyyy-mm-dd")) & "#"
DoCmd.OpenReport "report_name", acViewReport, WhereCondition:=str
在日期格式为mm/dd/yyyy或yyyy-mm-dd的windows计算机上,查询工作正常。但是,有些用户将系统日期设置为dd/mm/yyyy,Access似乎无法识别它。因此,当打开报告并应用筛选器时,它的读数是2021年8月11日的08/11/2021 (2021年11月8日),这显然给出了错误的结果。
我尝试使用以下内容为WHERE条件设置日期输入的格式:
建议的解决方案是使用代码format(From_Date.value, "yyyy-mm-dd")
格式化日期,但这是不起作用的。
为什么Access不支持dd/mm/yyyy格式?如果没有,那么我如何正确地按日期范围进行过滤呢?
是调整用户系统日期格式的唯一选项吗?
谢谢
发布于 2021-11-09 11:07:23
始终使用参数,切勿将格式化日期连接到SQL字符串。
如果在SQL字符串中使用格式化日期,那么意外出错的可能性很大。
Dim str as String
str = "DateCreated BETWEEN p1 AND p2"
DoCmd.SetParameter "p1", From_Date.value
DoCmd.SetParameter "p2", DateAdd("d", 1, To_Date.value)
DoCmd.OpenReport "report_name", acViewReport, WhereCondition:=str
在Access中阅读有关参数的更多信息:How do I use parameters in VBA in the different contexts in Microsoft Access?
发布于 2021-11-08 22:55:19
您可以使用其中一个general date format codes (而不是自定义格式字符串)来使用系统格式。
Dim str as String
str = "DateCreated BETWEEN #" & format(From_Date.value, "Long Date") & "# AND #" & DateAdd("d", 1, format(To_Date.value, "Long Date")) & "#"
DoCmd.OpenReport "report_name", acViewReport, WhereCondition:=str
https://stackoverflow.com/questions/69890844
复制相似问题