Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于用户提供的日期的Access sql查询仅返回时间为0:00:00的日期_Sql_Date_Ms Access_Prompt - Fatal编程技术网

基于用户提供的日期的Access sql查询仅返回时间为0:00:00的日期

基于用户提供的日期的Access sql查询仅返回时间为0:00:00的日期,sql,date,ms-access,prompt,Sql,Date,Ms Access,Prompt,还没有发现任何密切相关的问题,所以我们来看看 这是我的查询的简单版本: SELECT sampleID, beginDateTime FROM sample WHERE DateValue(beginDateTime) = [Enter sample date: ]; 这不会返回任何记录,但应根据我输入的日期返回3 但是,这个版本返回我所期望的,与提供的日期及其各自的时间匹配的所有记录 SELECT sampleID, beginDateTime FROM sample WHERE DateV

还没有发现任何密切相关的问题,所以我们来看看

这是我的查询的简单版本:

SELECT sampleID, beginDateTime
FROM sample
WHERE DateValue(beginDateTime) = [Enter sample date: ];
这不会返回任何记录,但应根据我输入的日期返回3

但是,这个版本返回我所期望的,与提供的日期及其各自的时间匹配的所有记录

SELECT sampleID, beginDateTime
FROM sample
WHERE DateValue(beginDateTime) = #2015-5-18#;
如何启用在Access SQL中正确格式化的用户提示,以返回适当的记录?注:我不知道VBA

还尝试添加
参数=beginDateTime日期时间这似乎会返回所有记录,并为它们指定提示用户输入的所有日期

已尝试在参数列表中使用DateValue:

SELECT sampleID, DateValue(beginDateTime)
FROM sample
WHERE beginDateTime = [Enter sample date: ];
这只返回日期=0:00:00

我希望我的查询能够提示用户输入一个日期(没有时间),并返回带有该日期的所有记录以及它们各自的时间

SELECT sampleID, beginDateTime
FROM sample
WHERE DateValue(beginDateTime) = #2015-5-18#;

我将非常感谢你的帮助。提前谢谢

您可以尝试将输入框返回的值转换为日期:

SELECT sampleID, beginDateTime
  FROM sample
 WHERE DateValue(beginDateTime) = CDate([Enter sample date: ]);

使用正确的语法指定参数:

PARAMETERS [Enter sample date: ] DateTime;
SELECT sampleID, beginDateTime
FROM sample
WHERE DateValue(beginDateTime) = [Enter sample date: ];

然后,它将接受根据当前Windows设置的格式输入的日期。

基于@Gustav的建议,使用类型化参数(这有一个额外的好处,Access将拒绝无效日期):

参数[输入样本日期:]DateTime;
选择sampleID,beginDateTime
从样品
其中beginDateTime>=[输入样本日期:]和beginDateTime<([输入样本日期:]+1)
这样可以避免在表达式上进行过滤,这会禁用索引使用,因此在大型数据集上的速度会很慢



编辑:要在界面中实现这一点,只需在“设计”视图中打开查询,然后转到“设计”、“参数”并输入参数的名称和数据类型。

与@Gustav的回答相比,这是一种风险,而且效率较低感谢StoneGiant。有没有办法将这种语法合并到表单调用的查询中?还是说这离题了?我在sql查询中尝试了DateValue([sample.beginDateTime])=([Forms]![Lab Replicate Query Form]![date\u time])。并添加到我想要运行查询的表单中,在controlsource=CDate([beginDateTime])中,但不是luck。有什么建议吗?非常感谢您的帮助。我认为这将是一个新问题,包含有关您正在做什么的更多详细信息。+1建议使用类型化参数。不太好的主意:如果表达式非常低效,则对其进行过滤。因此,使用参数并在提示用户两次时包含用户提示的建议将返回。我们只有您的查询,而没有您使用的方式和位置。参数将只提示一次。@Abby,参数化查询比使用字符串连接更安全,因为字符串连接容易受到SQL注入攻击。如果数据库是公开的,SQL注入才是真正需要考虑的问题。因为您已经在使用输入框,所以我刚刚修复了您的示例。这并不比你现有的风险更大。使用参数化查询是一个好习惯,但并非总是绝对必要的。@Abby:在最简单的级别上,用户可以键入一个“非日期”值,然后您的
CDate
将失败。通过将参数定义为日期,任何“非日期”都将被拒绝。更不用说查询会运行得更快。