Вопрос

В различных местах лишения свободы у меня настроен следующий запрос, напоминающий мне об истечении срока действия контракта за 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 такая возможность.

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

Это было полезно?

Решение

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

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

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

Помогает ли это?


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

Вместо расчета на 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

Другие советы

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

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 КАК q

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

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top