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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top