Pergunta

Eu tenho a seguinte consulta configurar, em várias prisões, para me lembrar de expirações de contrato 0, 7, 30, 60 e 90 dias antes da data de validade confirmada. Meu método de cálculo da data de notificação não me dá qualquer flexibilidade. Por exemplo, digamos que eu tenho 30 contratos expiram 12/5, um sábado, quando meu escritório não está aberta. Vou perder a notificação de que o contrato expirou naquele dia, e 7 dias fora.

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

Cada uma destas consultas serão exibidos em uma forma de "painel" para servir como uma lista de tarefas diárias. Seria ótimo se eu pudesse ter a forma representar uma data e clique em uma seta para avançar ou voltar um dia de cada vez, mas eu não sei se Access tem essa capacidade.

Se isso não trabalho, que outras formas posso ter certeza que eu não perca notificações sobre esses vencimentos?

Foi útil?

Solução

[EDIT] Se você não for um programador aqui é uma solução alternativa

Por que não usar o Formato função em sua consulta, por exemplo.

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

"ww" - especifica semanas, 2 especifica segunda-feira como primeiro dia da semana, 1 significa a semana 1 contém 01 janeiro

Agora é fácil de fazer cálculos de data nas últimas semanas, por exemplo, Contrato expirar mais de 4 semanas para o futuro:

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

Os contratos com vencimento mais de 4 semanas para o futuro e até 5 semanas para o futuro

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

Isso ajuda?


Por que você não apenas usar o semana recurso de funções como SomData ?

Em vez de calcular 30 dias à frente você poderia calcular 25, ou qualquer outro número de dias de semana à frente.

O código a seguir exibe uma caixa de mensagem, mas você poderia igualmente usar a função em uma consulta SQL atrás de uma caixa de mensagem.

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

Outras dicas

Talvez um pouco de complicação:

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

Isto pode ser colocado em sua declaração onde, assim:

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

Note que eu usei o alias q para qryAllSold pois isso faz com que seja mais fácil de ler a consulta: DE qryAllSold AS q

Ele provavelmente seria melhor usar False em vez de Não.

Se desejar, você deve ser capaz de usar um parâmetro:

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

O parâmetro permite que você escolha um número de dias. Seria ainda melhor se isso se refere a um campo de um formulário ou foi definido em VBA.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top