我正在使用一个使用.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.
我使用了一些调试输出来确保正确生成查询,当我选择日期时,我得到与上面相同的查询。
如果您知道为什么这不起作用或对正确的方法有任何暗示,我将非常感谢您的所有投入。
提前致谢
答案 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)