2016-06-21 44 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