Rappelez-moi vendredi, ce que je devrais voir le week-end
-
05-07-2019 - |
Question
La requête suivante a été configurée, dans diverses incarcérations, pour me rappeler les expirations de contrat 0, 7, 30, 60 et 90 jours avant la date d'expiration confirmée. Ma méthode de calcul de la date de notification ne me donne aucune flexibilité. Par exemple, disons que j'ai 30 contrats expirant le 12/5, un samedi où mon bureau n'est pas ouvert. La notification que le contrat a expiré ce jour-là et 7 jours plus tard me manquera.
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));
Chacune de ces requêtes sera affichée sur un "tableau de bord". formulaire pour servir de liste de tâches quotidiennes. Ce serait formidable si je pouvais que le formulaire représente une date et clique sur une flèche pour avancer ou reculer d’un jour à l’autre, mais je ne sais pas si Access dispose de cette fonctionnalité.
Si cela ne fonctionne pas, comment puis-je m'assurer de ne pas manquer les notifications concernant ces expirations?
La solution
[MODIFIER] Si vous n'êtes pas un programmeur, voici une solution alternative
Pourquoi ne pas utiliser la fonction Format dans votre requête, par exemple
Format([ConfirmedExpires],"ww",2,1)
& w; & w; " - spécifie les semaines, 2 spécifie le lundi comme premier jour de la semaine, 1 signifie que la semaine 1 contient le 1 er janvier
Maintenant, il est facile de faire des calculs de date en semaines, par exemple. Contrat expirant plus de 4 semaines dans le futur:
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4
Contrats expirant plus de 4 semaines et jusqu'à 5 semaines
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1))>4 -
Format([ConfirmedExpires],"ww",2,1)-Format(Now(),"ww",2,1)),=5
Est-ce que cela vous aide?
Pourquoi n'utilisez-vous pas simplement la fonctionnalité Jour de la semaine , telle que DateAdd ?
Au lieu de calculer 30 jours calendaires à l’avance, vous pouvez en calculer 25, ou tout autre nombre de jours de semaine à venir.
Le code ci-dessous affiche une boîte de message, mais vous pouvez également utiliser la fonction dans une requête SQL derrière une boîte de message.
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
Autres conseils
Peut-être une petite complication:
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())))
Ceci peut être mis dans votre déclaration where, comme suit:
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
Notez que j'ai utilisé l'alias q pour qryAllSold car cela facilite la lecture de la requête: À PARTIR DE qryAllSold AS q
Il serait probablement préférable d’utiliser False au lieu de No.
Si vous le souhaitez, vous devriez pouvoir utiliser un paramètre:
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
Le paramètre vous permet de choisir un nombre de jours. Ce serait encore mieux si cela faisait référence à un champ sur un formulaire ou était défini en VBA.