0

J'ai la requête suivante mis en place, dans diverses incarcérations, pour me rappeler des 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 12/5, un samedi lorsque mon bureau n'est pas ouvert. Je vais manquer la notification que le contrat a expiré ce jour-là, et 7 jours sur.Rappelez-moi vendredi, ce que je devrais voir le week-end

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 seront affichées sur un formulaire « tableau de bord » pour servir de liste de tâches quotidiennes. Ce serait bien si je pouvais avoir le formulaire représente une date, et cliquez sur une flèche pour avancer ou reculer un jour à la fois, mais je ne sais pas si Access a cette capacité.

Si cela ne fonctionne pas, de quelles autres façons puis-je m'assurer que je ne manque pas de notifications sur ces expirations?

Répondre

2

[EDIT] Si vous n'êtes pas un programmeur est ici une solution de rechange

Pourquoi ne pas utiliser la fonction Format dans votre requête, par exemple

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

« ww » - spécifie semaines, 2 précise lundi comme premier jour de la semaine, 1 signifie semaine 1 contient 1 janvier

Maintenant, il est facile de faire des calculs de date semaines par exemple Contrat expirant plus de 4 semaines dans le futur:

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

contrats arrivant à expiration plus de 4 semaines dans l'avenir et jusqu'à 5 semaines dans le futur

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 l'aide?


Pourquoi ne pas simplement utiliser la fonction semaine des fonctions comme DateAdd? Au lieu de calculer 30 jours de calendrier à l'avance, vous pouvez calculer 25, ou tout autre nombre de jours de la 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 
+0

J'ai pensé à cela, mais dimanche - 1 W me donner vendredi? Comment cela va-t-il permettre les vacances? – NickSentowski

+0

Si vos contrats sont financiers, par ex. FX, marchandise, etc alors les contrats spécifieront ce que faire si le règlement tombe le samedi, le soleil, ou un jour férié. Votre programme devrait suivre la documentation. Sun - 1w = vendredi car la fonction revient en arrière jusqu'au premier jour ouvrable trouvé. C'est ce dont vous avez besoin la plupart du temps, c'est-à-dire que vous concluez des transactions le vendredi avant le week-end. – heferav

+0

Où puis-je insérer ceci dans mon SQL? Sery, je suis un vendeur qui écrit mes propres outils, pas un programmeur. – NickSentowski

1

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

Cela peut être mis dans votre où la déclaration, 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 je l'ai utilisé l'alias q pour qryAllSold que cette il est plus facile de lire la requête: DE qryAllSold AS q

Il est préférable d'utiliser False au lieu de

Si vous le souhaitez, vous devriez être en mesure d'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 certain nombre de jours. Ce serait encore mieux si cela se réfère à un champ sur un formulaire ou a été défini dans VBA.

+0

Je ne sais vraiment pas comment ça va m'aider. Est-ce que je le lis mal? Cela ne ressemble pas à quelque chose qui fonctionnera dans une requête SQL. Voilà comment je lis dans pseudo: Si aujourd'hui + 0 = 7 puis aujourd'hui + 0 + 2 Else IF aujourd'hui + 0 = 1 alors aujourd'hui + 0 + 1 Else Aujourd'hui + 0 Endif Endif – NickSentowski

+0

Si aujourd'hui = jour 7 de la semaine (samedi où la semaine commence le dimanche), date + 2 (lundi), si aujourd'hui = jour 1 de la semaine (dimanche), date + 1 (lundi), sinon aujourd'hui. – Fionnuala

+0

Où puis-je insérer ceci dans mon SQL? Sry, je suis un vendeur qui écrit mes propres outils, pas un programmeur. – NickSentowski

Questions connexes