1

我将 Access 2007 数据库中的记录保存到一个简单的 2 列表中,并使用以下查询从中生成报告:

sql = "SELECT 
        OrderDate AS `Order Date and Time`, 
        Items AS `Ordered Items` 
    FROM Orders 
    WHERE Format(Orders.OrderDate,'mm/dd/yyyy')  
       >= Format(#" + startDate.Value.Date + "#,'mm/dd/yyyy') 
      AND Format(Orders.OrderDate,'mm/dd/yyyy')
       <= Format(#" + endDate.Value.Date + "#,'mm/dd/yyyy')
    ORDER BY OrderDate"

startDate并且endDate是 VB.2010 中的 datePicker 对象。

startDate当和endDate在同一年内时,将按预期生成报告。因此,例如,如果我检查 11 月 18 日至 12 月 27 日之间的订单,我会得到预期的结果。但是如果我去,比如从 2​​012 年 11 月 1 日到 2013 年 1 月 8 日,它不会显示任何记录,即使所有这些月份(11 月、12 月和 1 月)都有记录。

有什么问题?

4

1 回答 1

3

在查询中使用实际日期,而不是格式化日期。就像是:

SELECT OrderDate, Items 
FROM Orders 
WHERE Orders.OrderDate BETWEEN #startDate.Value.Date# AND #endDate.Value.Date# 
ORDER BY OrderDate;

http://www.databasedev.co.uk/sql-between.html

或者,如果您想保留原始查询,请尝试更改日期的格式,以使年份最重要,然后是月份和日期,因此:

SELECT OrderDate AS `Order Date and Time`, Items AS `Ordered Items` 
FROM Orders 
WHERE Format(Orders.OrderDate,'yyyy/mm/dd') >= Format(#" + startDate.Value.Date + "#,'yyyy/mm/dd') 
AND Format(Orders.OrderDate,'yyyy/mm/dd') <= Format(#" + endDate.Value.Date + "#,'yyyy/mm/dd') 
ORDER BY OrderDate;
于 2012-12-17T21:53:08.420 回答