2

我正在尝试过滤具有时间间隔的表单

开始日期和结束日期都在具有这种格式的文本框中dd/mm/yyyy

我的查询VBA看起来像这样

WHERE (Format([SalesCallDate],'dd/mm/yyyy') BETWEEN #" & Format(txtStartDate, "dd/mm/yyyy") & "#
 AND #" & Format(txtEndDate, "dd/mm/yyyy") & "#)"

我不知道为什么间隔是01/12/2012to时21/12/2012,我得到的日期是15/08/1991. 这就是为什么我想明确说明格式。

SQL 查询的输出是
WHERE (Format([SalesCallDate],'dd/mm/yyyy') BETWEEN #01/12/2012# AND #21/12/2012#)

我试过有和没有格式。

我错过了什么吗?

注意SalesCallDateDateTimeSQL Server 链接表中的字段

谢谢

4

1 回答 1

1

听起来 txtStartDate 和 txtEndDate 都是未绑定的文本框。将它们的格式属性设置为日期格式。

格式设置为一般日期的文本框

在日期格式和“显示日期选择器”属性设置为“日期”的情况下,Access 版本 >= 2007 将为您的文本框启用该日期选择器功能。如果您的用户喜欢这样,这是该格式属性的附带好处。

无论如何,日期格式将允许 Access 和 VBA 将这些文本框值解释为日期/时间数据类型:

? TypeName(Forms!frmDateRange!txtStartDate.Value)
Date

然后由于SalesCallDate是日期/时间类型,您的WHERE子句可以直接将该字段与文本框值进行比较。

WHERE SalesCallDate BETWEEN
        Forms!frmDateRange!txtStartDate
    AND Forms!frmDateRange!txtEndDate

或者,如果您的表单具有构建包含 SQL 语句的字符串的代码,并且您想要日期范围的日期/时间文字......

"WHERE SalesCallDate BETWEEN " & _
    Format(Me.txtStartDate, "\#yyyy-m-d\#")
    " AND " & Format(Me.txtEndDate, "\#yyyy-m-d\#")
于 2012-12-14T20:39:34.870 回答