在ms访问中不起作用的日期之间的比较

时间:2015-07-01 00:03:46

标签: sql database ms-access ms-access-2013

使用Access 2013 我在Access中有表,其中“DueDate”列被定义为“日期/时间” 系统默认日期格式为dd / mm / yyyy

想要根据文本框“txtDueDateUpto”中的值,通过VBA更改List的行源。 所以,我得到了所有的任务,其中花花公子的日期小于用户在“txtDueDateUpto”中输入的日期

mySql = "SELECT TaskTbl.TaskID "
        & " FROM TaskTbl " _
        & " WHERE " _
        & " DueDate is not Null  and " _
        & " Format (DueDate," & """dd/mm/yyyy""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "dd/mm/yyyy") _

Me.listTask.RowSource = mySql

我有3个任务用于测试目的。 其中DueDate保存为

 TaskID DueDate
 1      25-17-2015
 2      01-07-2015
 3      29-06-2015

并且,txtDueDateUpto中的值是06-07-2015 txtDueDateUpto格式属性设置为“短日期” 我期待使用给定的SQL返回taskID 2,3,但我得到taskID 2

我整夜坐着,尝试了许多排列和组合,但是不能得到那些,我做错了。

Access VBA的新手。请提前帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

如果您要将日期格式化为字符串 - 并进行比较 - 那么请始终使用YYYY-MM-DD格式:

   & " Format (DueDate," & """yyyy-mm-dd""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "yyyy-mm-dd") _

但是,我很确定MS Access可以在没有转换的情况下进行日期比较:

   DueDate <= CDate(Me.txtDueDateUpto.Value)

答案 1 :(得分:1)

始终将日期作为日期处理,而不是字符串,没有例外。

如果您的文本框已经分配了日期/时间格式,您甚至不必使用CDate或DateValue,因为Access会从数据类型Date读取该值。

但是,必须将值与SQL代码连接为日期值的格式正确的字符串表达式:

mySql = "SELECT TaskTbl.TaskID "
        & " FROM TaskTbl " _
        & " WHERE " _
        & " DueDate is not Null and " _
        & " DueDate <= #" & Format(Me!txtDueDateUpto.Value, "yyyy\/mm\/dd") & "#"