vb和mdb的DateTime问题

时间:2012-06-18 22:03:39

标签: sql ms-access datetime

我正在使用一个使用.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.

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

如果您知道为什么这不起作用或对正确的方法有任何暗示,我将非常感谢您的所有投入。

提前致谢

2 个答案:

答案 0 :(得分:0)

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

提示:VBA和MS Access将日期存储为双精度值,积分部分表示日期(自1900年1月1日以来的天数),小数部分表示时间(以分数表示)。 E.G。:2012年6月20日,05:57存储为编号41080.2408。

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

这对我有用。希望这会对你有所帮助。

答案 1 :(得分:0)

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

WHERE (DateOpen BETWEEN @DStart AND @DEnd)