Domanda

Ho impostato la seguente query, in varie incarcerazioni, per ricordarmi delle scadenze del contratto 0, 7, 30, 60 e 90 giorni prima della data di scadenza confermata. Il mio metodo di calcolo della data di notifica non mi dà alcuna flessibilità. Ad esempio, supponiamo che io abbia 30 contratti in scadenza il 12/5, un sabato quando il mio ufficio non è aperto. Mi mancherà la notifica che il contratto è scaduto quel giorno e 7 giorni fuori.

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));

Ciascuna di queste query verrà visualizzata su una "dashboard" modulo da utilizzare come elenco di attività quotidiane. Sarebbe bello se il modulo potesse rappresentare una data e fare clic su una freccia per spostarsi avanti o indietro di un giorno alla volta, ma non so se Access ha questa funzionalità.

Se non funziona, in quali altri modi posso assicurarmi di non perdere le notifiche su queste scadenze?

È stato utile?

Soluzione

[EDIT] Se non sei un programmatore, ecco una soluzione alternativa

Perché non utilizzare la funzione Formato nella tua query, ad esempio

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

" ww " - specifica le settimane, 2 specifica il lunedì come primo giorno della settimana, 1 indica che la settimana 1 contiene 1 gennaio

Ora è facile eseguire calcoli della data in settimane, ad es. Contratto con scadenza superiore a 4 settimane nel futuro:

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

Contratti che scadono da più di 4 settimane nel futuro e fino a 5 settimane nel futuro

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

Aiuta?


Perché non usi semplicemente la funzione giorno della settimana di funzioni come DateAdd ?

Invece di calcolare 30 giorni di calendario in anticipo, potresti calcolare 25 o qualsiasi altro numero di giorni feriali in anticipo.

Il codice seguente mostra una finestra di messaggio, ma è possibile utilizzare la funzione in una query SQL dietro una finestra di messaggio.

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

Altri suggerimenti

Forse una piccola complicazione:

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())))

Questo può essere inserito nell'istruzione where, in questo modo:

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

Nota che ho usato l'alias q per qryAllSold in quanto ciò semplifica la lettura della query:     DA qryAllSold AS q

Probabilmente sarebbe meglio usare False invece di No.

Se lo desideri, dovresti essere in grado di utilizzare un parametro:

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

Il parametro consente di selezionare un numero di giorni. Sarebbe ancora meglio se questo si riferisse a un campo in un modulo o fosse impostato in VBA.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top