【发布时间】:2021-12-12 16:49:14
【问题描述】:
我有一些 VBA 代码,它从文本框中的两个日期选择器值中获取日期和日期字段。
但是,在两个日期之间进行搜索时,我会收到“输入参数值”提示,要求输入。
Dim SQLAllReject As String
Dim strDateFrom As String
Dim strDateTo As String
strDateFrom = Format(txtDate.Value, "mm/dd/yyyy")
strDateTo = Format(txtDateTo.Value, "mm/dd/yyyy")
直接在查询设计向导中运行时,在日期之间进行搜索可以正常工作:
WHERE (((XXXXXXXXXXXXXXXXXXXX.Date) Between #10/1/2021# And #10/27/2021#))
这里有什么问题?如何强制 Access/VBA 采用我指定的日期并在它们之间搜索而不显示“输入参数值”提示?
当我调试查询并逐步执行时,它给出的日期与在查询设计视图中运行它的日期完全相同。
仅供参考,如果我使用一个日期和 LIKE 运算符,这可以正常工作。
SQLAllReject = "SELECT dbo_vw_busobj_file_rejections_load_access_temp5_copy.HashKey AS [ID], dbo_vw_busobj_file_rejections_load_access_temp5_copy.Reject_Date AS [Date], " & _
"FROM dbo_vw_busobj_file_rejections_load_access_temp5_copy " & _
"WHERE (((dbo_busobj_file_rejections_load_access_temp5_copy.Reject_Date) Between #" & strDateFrom & "# And #" & strDateTo & "#)) " & _
"ORDER BY dbo_vw_busobj_file_rejections_load_access_temp5_copy.Reject_Date DESC;"
【问题讨论】:
-
您将变量声明为字符串类型。您需要将字符串转换为日期类型。
-
你的 sql 字符串是什么样子的 - 你使用 strDateFrom 的那个?
-
SQLAllReject = “SELECT dbo_vw_busobj_file_rejections_load_access_temp5_copy.HashKey AS [ID],dbo_vw_busobj_file_rejections_load_access_temp5_copy.Reject_Date AS [日期],” &_ “FROM dbo_vw_busobj_file_rejections_load_access_temp5_copy” &_ “WHERE(((dbo_busobj_file_rejections_load_access_temp5_copy.Reject_Date)#之间” & strDateFrom & "# And #" & strDateTo & "#)) " & _ "ORDER BY dbo_vw_busobj_file_rejections_load_access_temp5_copy.Reject_Date DESC;"
-
如果您使用 Debug.Print strDateFrom 和 Debug.Print strDateTo,您的输出是预期的并且格式正确吗?
-
为了便于阅读:你知道你可以为你的表使用一个 alias,比如:
SELECT t.x FROM table_with_very_long_name t WHERE ...