在 MS 访问中不起作用的日期之间的比较
comparison between dates not working in ms access
使用 Access 2013
我在 Access 中有 table,其中列 "DueDate" 定义为 "Date/Time"
系统默认日期格式为dd/mm/yyyy
想根据文本框中的值 "txtDueDateUpto" 通过 VBA 更改列表的行源。
所以,我得到了所有任务,其中花花公子的日期小于等于用户在 "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 格式 属性 设置为 "Short Date"
我期望使用给定的 SQL 返回 taskID 2,3,但我得到的是 taskID 2
我整晚坐着,尝试了很多排列组合,但还是搞不懂那是什么,我做错了。
Access 新手 VBA。请帮助,在此先感谢。
如果您要将日期格式化为字符串——并比较它们——则始终使用 YYYY-MM-DD 格式:
& " Format (DueDate," & """yyyy-mm-dd""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "yyyy-mm-dd") _
但是,我很确定 MS Access 可以在不进行转换的情况下进行日期比较:
DueDate <= CDate(Me.txtDueDateUpto.Value)
始终将日期作为日期处理,而不是字符串,无一例外。
如果您的文本框已指定 date/time 格式,您甚至不必使用 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") & "#"
使用 Access 2013 我在 Access 中有 table,其中列 "DueDate" 定义为 "Date/Time" 系统默认日期格式为dd/mm/yyyy
想根据文本框中的值 "txtDueDateUpto" 通过 VBA 更改列表的行源。 所以,我得到了所有任务,其中花花公子的日期小于等于用户在 "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 格式 属性 设置为 "Short Date" 我期望使用给定的 SQL 返回 taskID 2,3,但我得到的是 taskID 2
我整晚坐着,尝试了很多排列组合,但还是搞不懂那是什么,我做错了。
Access 新手 VBA。请帮助,在此先感谢。
如果您要将日期格式化为字符串——并比较它们——则始终使用 YYYY-MM-DD 格式:
& " Format (DueDate," & """yyyy-mm-dd""" & ") <= " & Format(CDate(Me.txtDueDateUpto.Value), "yyyy-mm-dd") _
但是,我很确定 MS Access 可以在不进行转换的情况下进行日期比较:
DueDate <= CDate(Me.txtDueDateUpto.Value)
始终将日期作为日期处理,而不是字符串,无一例外。
如果您的文本框已指定 date/time 格式,您甚至不必使用 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") & "#"