0

我正在开发一个使用 .mdb 数据库的旧软件。

我已经成功地建立了与数据库的连接,当涉及到像这样的预编程查询时,我可以很好地运行 sql 查询:

SELECT COUNT(*) AS test FROM shifts WHERE EmpId = '2' AND DateOpen <= '3/28/2007'

继续前进,我将 2 替换为取决于用户选择的表达式,如下所示

Employees(employe.SelectedIndex)

这也很好。

现在,当我尝试将日期替换为startDate.Value.ToShortDateString我开始面临许多转换问题时,我终于有了一些有用的东西,所以我的 where 子句变成了这样:

WHERE EmpId = '" & Employees(employe.SelectedIndex) & "' AND DateDiff('d', DateOpen, '" & endDate.Value.ToShortDateString & "') <= 0

现在我选择了上面查询中的相同日期,查询运行没有问题,但令人惊讶的是我得到了一个空结果,这对我来说没有任何意义,因为已经存在值的查询返回的计数为 2。

我使用了一些调试输出来确保正确生成了查询,并且在选择日期时得到了与上面相同的查询。

如果您知道为什么这不起作用或对正确的方法有任何提示,我将不胜感激您的所有意见。

提前致谢

4

2 回答 2

0

我建议您在处理 MS Access 和 VBA 中的日期时避免使用格式化字符串。

提示:VBA 和 MS Access 将日期存储为双精度值,整数部分表示日期(自 1900 年 1 月 1 日起的天数),小数部分表示时间(天的小数部分)。EG:2012 年 6 月 20 日 05:57 存储为号码 41080.2408。

您可以使用双精度值来比较日期,就像比较任何一对数字一样,而不是使用格式化的字符串。如果值存储在“日期/时间”类型的字段中,您可以使用CDbl()将日期转换为双精度值,然后将其与另一个双精度值进行比较。

这对我有用。希望这对您有所帮助。

于 2012-06-20T10:51:52.900 回答
0

我最终在查询中使用了 BETWEEN,并且使用参数查询就像一个魅力!

WHERE (DateOpen BETWEEN @DStart AND @DEnd)
于 2012-07-23T00:10:07.507 回答