2016-06-21 23 views
0

我目前正在处理存储软件许可信息(例如软件名称,购买日期,成本,数量等)的数据库......在软件已拥有为期12个月,我们必须支付维护费。使用MS Access查询查找给定日期的下一次出现

因此,我的问题是如何设计一个查询,它将采购日期和计算该日期的下一次出现存储在维护日期字段中。例如)如果在1999年12月31日购买了许可证,我需要在2016年12月31日支付维护费用。

我没有很多MS Access或SQL查询的经验,经过一段时间的研究,我甚至不确定这是可能的。我会很感激你们可以给我的任何帮助!

+0

查找到[使用DateAdd()](http://www.techonthenet.com/access/functions/date/dateadd.php)提供SQL和VBA,允许您跨越多个时间间隔(日,周,月,年)添加。 – Parfait

+0

会做,谢谢你的提示! – Jared

+0

这正是我需要的,谢谢! – Jared

回答

1

这里的,会做的正是这种功能:在Access

Public Function DateNextAnnualDay(_ 
    ByVal AnnualDay As Date) _ 
    As Date 

    Dim SomeDate  As Date 
    Dim NextAnnualDay As Date 
    Dim Years   As Integer 

    SomeDate = Date 

    NextAnnualDay = AnnualDay 
    Years = DateDiff("yyyy", AnnualDay, SomeDate) 
    If Years < 0 Then 
     ' Don't calculate hypothetical annual days. 
    Else 
     NextAnnualDay = DateAdd("yyyy", Years, AnnualDay) 
     If DateDiff("d", SomeDate, NextAnnualDay) <= 0 Then 
      ' Next annual day falls earlier in the year than SomeDate. 
      NextAnnualDay = DateAdd("yyyy", Years + 1, AnnualDay) 
     End If 
    End If 

    DateNextAnnualDay = NextAnnualDay 

End Function 
0

下面是语法

SELECT DateAdd("yyyy",1,[MyDate]) AS MaintDate 
FROM Table; 
0

如果您需要做更复杂的查询,你可以在模块中编写一个函数,然后使用VBA访问它的查询。例如,您可以通过循环遍历匹配的条件的

Function GetNextDate(ByVal dteOriginalDate As Date) As Date 

While dteOriginalDate <= DateTime.Now 

    dteOriginalDate = DateAdd("Yyyy", 1, dteOriginalDate) 

Wend 

GetNextDate = dteOriginalDate 

End Function 

会遍历从原来的日期,在该日期是在未来的分数相加一年。您可以将它构建到一个查询中(使用右键单击 - >构建),以便每行通过您的代码并应用逻辑。

这将允许您将原始许可证日期存储在数据库中,并计算下一个到期日期,而不必知道(或修改)中间年份。

+0

这个工程,谢谢你的帮助! – Jared