我正在使用vb.net和ms访问2003作为后端。当我使用下面显示的sql查询时,我的结果中没有任何记录。我正在尝试查找日期较低(或之前)日期的记录。
Dim Sql, CurrentDate as String
Dim TrDate as Date
Dim DataVal As Integer
TrDate=DateTime.Now
CurrentDate=Format(TrDate, "dd/MM/yyyy hh:mm:ss tt")
Sql="Select count(*) from Table1 where InvDate<=#" & CurrentDate & "#"
IF DBConOpen()=True
cmdOledb.CommandText = sql
cmdOledb.CommandType = CommandType.Text
cmdOledb.Connection = ConOledb
DataVal = cmdOledb.ExecuteScalar
msgbox(DataVal)
End IF
例如,如果我当前的日期是01/09/2012或02/09/2012或.. 12/09/2012,并且数据库中的日期是01/09/2012或02/09/2012或.. 12 / 09/2012。我应该得到相应的记录数。但在这种情况下我得到0条记录。
但如果我目前的日期是01/09/2012或02/09/2012或.. 12/09/2012且数据库中的日期是20/08/2012或15/06/2012或.. 30 / 05/2012。我得到了正确的记录数。
我在MS访问表中定义的日期格式是“常规日期”。有人能够发现什么是错的吗?
答案 0 :(得分:1)
您应该使用:
CurrentDate=Format(TrDate, "yyyy/MM/dd hh:mm:ss tt")
访问需要一个明确的日期。
您可能也想删除时间元素。
答案 1 :(得分:1)
除非您在提交查询之前需要在Dot.Net中确定日期/时间值,否则您可以使用Access数据库引擎的Now()
函数。
Sql="Select count(*) from Table1 where InvDate<=Now()"
该方法避免了有关格式化和分隔符的问题。
如果您只想要没有当前时间的日期,请使用Date()
代替Now()
。 (实际上,Date()
将作为时间组件返回午夜。)