MS Access:获取位于start_date到end_date范围内的日期数组

时间:2014-12-01 10:53:00

标签: ms-access access-vba

MS Access 2003。

我需要获取位于 start_date 范围内的日期数组到 end_date 。 我没有在MS Access的标准集中找到这样的功能。

我写VBA功能:

Option Compare Database
' © Andrey Bushman, 2014
' Get the array of dates which are located in the range start_date to end_date.
' The result is an array of Date items.
Public Function GetDays(start_date As Date, end_date As Date)

If start_date > end_date Then
 ' end_date can't be less than start_date.
 GetDays = Null
 Exit Function
End If

Dim size As Long
size = end_date - start_date

Dim result() As Date
ReDim result(size)  ' including the range boundaries.

Dim index As Long
index = 0

Dim day As Date
day = start_date

Do While day <= end_date
    result(index) = day
    day = day + 1
    index = index + 1
Loop

    GetDays = result
End Function

我的SQL查询:

SELECT tbChecks.CheckId, tbChecks.[In], tbChecks.Back, GetDays([In],[Back]) AS DayItem FROM tbChecks;

但是我在每个记录的 DayItem 字段中都会收到 #Error 文本。

这也不行:

SELECT GetDays(CDate("01.01.2014"), CDate("05.01.2014")) as DayItem;

我收到错误:条件表达式中的数据类型不匹配。 (错误3464)

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您收到错误是因为您的VBA函数返回了Date值的数组,但Access数据库引擎没有Array字段类型。即使它确实如此,你最终会得到一行包含日期数组的行(根据对问题的评论),你希望每个日期都在一个单独的行中。

如果你创建一个&#34;数字&#34;你应该能够在不使用VBA的情况下完成你的目标。具有从0到足够大的值的连续整数值的表,例如,

   n
----
   0
   1
   2
   3
...
 998
 999
1000

然后使用这样的查询:

SELECT DateAdd("d",n,#2014-01-01#) AS DayItem 
FROM Numbers 
WHERE n <= DateDiff("d",#2014-01-01#,#2014-01-05#)

返回

   DayItem
----------
2014-01-01
2014-01-02
2014-01-03
2014-01-04
2014-01-05