请参阅下面的DDL:
CREATE TABLE TestDate (bookingdate datetime)
INSERT INTO TestDate VALUES ('2013-10-04')
请参阅下面的ADODB记录集:
rs.open "SELECT bookingdate FROM TestDate"
If rs("bookingdate") > dateadd("yyyy", -6, Now)
msgbox("test")
end if
无论数据库中的日期是什么,msgbox始终显示。
我相信我必须这样做:
If datevalue(rs("bookingdate")) > dateadd("yyyy", -6, Now)
msgbox("test")
end if
然后,如果预订日期在过去六年内,则仅显示消息框。
在第一个代码片段中,bookingdate被视为字符串吗?
我相信以下网页会给我答案:http://www.w3schools.com/ado/ado_datatypes.asp。但是,它表示内部服务器错误。
答案 0 :(得分:2)
你永远不应该写这样的代码:
If rs("bookingdate") > DateAdd("yyyy", -6, Now)
而是养成不依赖于默认属性的习惯,根据使用情况,这可能适得其反。优选:
If rs("bookingdate").Value > DateAdd("yyyy", -6, Now)
但是你从这个难题中遗漏的一块巨大的东西就是你正在使用的DBMS。有些人会使用一些非常时髦的数据类型并将其称为DATETIME
,因此您可能希望同时查看返回字段的ADO类型并尝试显示TypeName(rs("bookingdate").Value)
以查看您在代码中的最终结果
如果返回的数据属于某种类型,例如Decimal
或String
,则所有投注均已关闭,您需要通过正确的一组回转将其转换为有用的东西,然后再进行比较。