Frage

Ich habe die folgende Abfrage eingerichtet, in verschiedenen Inhaftierungen, um mich daran zu erinnern Vertrag Abläufe 0, 7, 30, 60, und 90 Tage vor der bestätigten Ablaufdatum.Meine Methode der Berechnung des Datum der Notifizierung nicht geben mir jede Flexibilität.Zum Beispiel, sagen, ich habe 30 auslaufenden Verträge 12/5, einem Samstag, wenn mein office nicht öffnen.Ich werde Sie vermissen die Mitteilung, dass der Vertrag abgelaufen, der Tag und 7 Tage aus.

SELECT qryAllSold.SoldID, qryAllSold.CompanyName, qryAllSold.Product, qryAllSold.Description, qryAllSold.Quantity, qryAllSold.Price, qryAllSold.ConfirmedExpires, qryAllSold.Note
FROM qryAllSold
WHERE (((qryAllSold.ConfirmedExpires)=DateAdd("d",0,Int(Now()))) AND ((qryAllSold.RenewedToID) Is Null) AND ((qryAllSold.NonOpportunity)=No));

Jede dieser Abfragen wird angezeigt, auf einem "dashboard" - form, um zu dienen als eine tägliche Aufgabenliste.Es wäre toll, wenn ich könnte, haben die form repräsentieren ein Datum aus und klicken Sie auf einen Pfeil, um vorwärts oder zurück ein Tag zu einer Zeit, aber ich weiß nicht, ob Zugang hat diese Fähigkeit.

Wenn das nicht funktioniert, welche anderen Möglichkeiten kann ich sicherstellen, dass ich verpassen Sie Benachrichtigungen an diese Abläufe?

War es hilfreich?

Lösung

[EDIT] Wenn Sie kein Programmierer hier ist eine alternative Lösung

Warum nicht verwenden Sie die Format Funktion in Ihrer Abfrage, z.

Format([ConfirmedExpires],"ww",2,1)

"ww" - gibt Wochen, 2 legt Montag als ersten Tag der Woche, 1 bedeutet Woche 1 enthält 1. JANUAR

Jetzt ist es einfach, Datumsberechnungen in Wochen zum Beispiel zu tun Vertrag ausläuft mehr als 4 Wochen in die Zukunft:

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4

Verträge mehr als 4 Wochen in die Zukunft ablaufen und bis zu 5 Wochen in die Zukunft

Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4 -
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1)),=5

Ist das helfen?


Warum Sie nicht nur verwenden, um den Tag Funktion von Funktionen wie DateAdd

Stattdessen 30 Kalendertage vor der Berechnung Sie 25 berechnen könnte, oder jede andere Anzahl der Wochentage voraus.

Der folgende Code zeigt ein Meldungsfeld, aber man könnte ebenso die Funktion in einer SQL-Abfrage hinter einem Meldungsfeld verwenden.

Sub TestWeekDay()
    Dim FirstDate As Date    ' Declare variables.
    Dim IntervalType As String
    Dim Number As Integer
    Dim Msg

    IntervalType = "ww"    ' "ww" specifies weeks as interval.
    FirstDate = InputBox("Enter a date")
    Number = InputBox("Enter number of weekdays to add")
    Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
    MsgBox Msg
End Sub

Andere Tipps

Vielleicht eine kleine Komplikation:

IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))

Dies kann in Ihrer where-Anweisung, etwa so:

SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d", 0, Date())) = 7, DateAdd("d", 0, Date()) + 2, IIf(Weekday(DateAdd("d", 0, Date())) = 1, DateAdd("d", 0, Date()) + 1, DateAdd("d", 0, Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

Beachten Sie, dass ich die alias-q für qryAllSold wie diese macht es einfacher zu Lesen Sie die Abfrage:AUS qryAllSold q

Wahrscheinlich ist es am besten zu nutzen False, statt Nein.

Wenn Sie möchten, sollten Sie in der Lage sein, um einen parameter zu verwenden:

PARAMETERS NoDays Short;
SELECT q.SoldID, q.CompanyName, q.Product, 
       q.Description, q.Quantity, q.Price, 
       q.ConfirmedExpires, q.Note
FROM qryAllSold AS q
WHERE q.ConfirmedExpires=IIf(Weekday(DateAdd("d",[NoDays],Date()))=7,DateAdd("d",[NoDays],Date())+2,IIf(Weekday(DateAdd("d",[NoDays],Date()))=1,DateAdd("d",[NoDays],Date())+1,DateAdd("d",[NoDays],Date())))
AND q.RenewedToID Is Null AND q.NonOpportunity=No

Die parameter können Sie wählen eine Anzahl von Tagen.Es wäre noch besser, wenn diese bezog sich auf ein Feld in einem Formular oder war set in VBA.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top