2016-06-21 7 views
0

Ich arbeite derzeit an einer Datenbank, die Software-Lizenzinformationen wie Name der Software, Kaufdatum, Kosten, Menge usw. speichert. Nachdem die Software besessen wurde Für 12 Monate müssen wir eine Wartungsgebühr bezahlen.Suche nach dem nächsten Vorkommen eines bestimmten Datums mit MS Access-Abfrage

Meine Frage ist daher, wie Sie eine Abfrage entwerfen, die das Kaufdatum nimmt und das nächste Vorkommen dieses Datums berechnet, das im Wartungsdatumsfeld gespeichert werden soll. Ex) Wenn eine Lizenz am 31.12.1999 erworben wurde, müsste ich die Wartung am 31.12.2016 bezahlen.

Ich habe nicht viel Erfahrung mit MS Access oder SQL-Abfragen, und nachdem ich dies für eine Weile erforscht habe, bin ich nicht einmal sicher, ob dies möglich ist. Ich würde jede Hilfe schätzen, die Sie mir Kerle geben konnten!

+0

Blick in [DateAdd()] (http://www.techonthenet.com/access/functions/date/dateadd.php) in Access verfügbar SQL und VBA, so dass Sie über viele Zeitintervalle (Tag, Woche, Monat, Jahr) hinzufügen können. – Parfait

+0

Wird tun, danke für den Tipp! – Jared

+0

Das war genau das, was ich brauchte, danke! – Jared

Antwort

1

Hier ist eine Funktion, die genau dies tun:

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

Hier ist die Syntax

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

Wenn Sie komplizierter tun Abfragen Sie eine Funktion in einem Modul schreiben und sie dann in einer Abfrage zugreifen VBA verwenden. Zum Beispiel können Sie durch eine Schleife durchlaufen, eine Bedingung entsprechen

Function GetNextDate(ByVal dteOriginalDate As Date) As Date 

While dteOriginalDate <= DateTime.Now 

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

Wend 

GetNextDate = dteOriginalDate 

End Function 

iterieren ein Jahr ab dem ursprünglichen Datum bis zu dem Punkt hinzugefügt, bei der das Datum in der Zukunft ist. Sie können es in eine Abfrage (mit der rechten Maustaste -> Build) erstellen, so dass jede Zeile Ihren Code durchläuft und die Logik anwendet.

Damit können Sie das ursprüngliche Lizenzdatum in Ihrer Datenbank speichern und das nächste Fälligkeitsdatum berechnen, ohne die dazwischenliegenden Jahre kennen zu müssen (oder zu ändern).

+0

Das funktioniert, danke für die Hilfe! – Jared

Verwandte Themen