【发布时间】:2021-03-28 23:30:37
【问题描述】:
我在访问中有一个 SQL 查询,它将获取计算日期介于两个值之间的所有记录。如果我对日期文字进行硬编码,例如:
SELECT *
FROM Table
WHERE DateAdd("d",-60,DateAdd("yyyy",65,[Table].[BirthDate])) Between #3/21/2021# And #3/27/2021#;
但是我需要对日期之间的日期进行参数化,以便用户可以输入它们:
SELECT *
FROM Table
WHERE DateAdd("d",-60,DateAdd("yyyy",65,[Table].[BirthDate])) Between [StartDate] And [EndDate];
但是,当我运行后一个查询并输入与前一个硬编码的完全相同的日期时,它开始将记录拉出介于范围之间。我试图输入像3/21/2021 这样的日期以及像#3/21/2021# 这样的日期文字,但都不起作用。后者根本不拉任何东西。
我还有一个表单,其中包含一些使用短日期格式的文本框,让用户可以选择查询的日期。它有同样的问题,即撤回不正确的记录。据我所知,这些记录都没有任何时间成分。
如何获取正确使用用户输入参数的日期?
【问题讨论】:
-
自从我使用 Access 以来已经很久很久了,但认为日期仍然需要
#? ...例如#[StartDate]#,虽然我可能是错的。 -
好主意,但似乎不起作用。查询不会运行并抱怨这样的语法错误。
-
这些参数对我有用。我从不使用动态参数化查询。我更喜欢 VBA 来构建过滤条件并应用于表单或报告。如果您必须使用动态参数,则应参考表单上的控件进行输入。无法验证通过弹出提示输入。 SQL 注入对于用户输入的输入来说是一个明确的风险。尽可能使用组合框和列表框。
-
更正,没有错误但也没有得到正确的记录输出。我的其他 cmets 仍然适用。