Напомни мне в пятницу, что я должен увидеть на выходных - PullRequest
0 голосов
/ 23 октября 2009

У меня есть следующий запрос, в различных заключениях, чтобы напомнить мне об истечении срока действия контракта за 0, 7, 30, 60 и 90 дней до подтвержденной даты истечения срока действия. Мой метод расчета даты уведомления не дает мне никакой гибкости. Например, скажем, у меня 30 контрактов, срок действия которых истекает 12/5, в субботу, когда мой офис не работает. Я буду скучать по уведомлению о том, что контракт истек в тот же день, и через 7 дней.

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

Каждый из этих запросов будет отображаться в одной форме «панели инструментов», чтобы служить ежедневным списком задач. Было бы замечательно, если бы я мог иметь форму, представляющую дату, и щелкнуть стрелку, чтобы перейти вперед или назад на день за раз, но я не знаю, имеет ли Access такую ​​возможность.

Если это не сработает, какими еще способами я могу быть уверен, что не пропущу уведомления об этих истечениях?

Ответы [ 2 ]

2 голосов
/ 27 октября 2009

[РЕДАКТИРОВАТЬ] Если вы не программист, вот альтернативное решение

Почему бы не использовать функцию Формат в вашем запросе, например,

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

"ww" - указывает недели, 2 определяет понедельник как первый день недели, 1 означает, что неделя 1 содержит 1 января

Теперь легко выполнять вычисления даты за недели, например Срок действия контракта истекает более чем на 4 недели в будущем:

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

Контракты, срок действия которых истекает более чем на 4 недели в будущем и до 5 недель в будущем

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

Это помогает?


Почему бы вам не использовать функцию дня недели для таких функций, как DateAdd ?

Вместо расчета 30 календарных дней вы можете рассчитать 25 или любое другое количество дней вперед.

Приведенный ниже код отображает окно сообщения, но вы также можете использовать эту функцию в запросе SQL за окном сообщения.

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
1 голос
/ 27 октября 2009

Возможно, небольшое осложнение:

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

Это можно указать в выражении where следующим образом:

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

Обратите внимание, что я использовал псевдоним q для qryAllSold, поскольку это облегчает чтение запроса: ОТ qryAllSold AS q

Вероятно, было бы лучше использовать False вместо №

Если вы хотите, вы можете использовать параметр:

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

Параметр позволяет выбрать количество дней. Было бы еще лучше, если бы это относилось к полю в форме или было задано в VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...