ENCONTRAR DATAS CALCULO

LUIS.HERRERA 09/07/2005 14:55:11
#93132
Estou com problemas para montar uma SQL acessando um MDB da seguinte forma:

tabela [Lancamento] - campo [DataAlteracao]

O usuário informa:
- um período de validação em dias ex: 365 (igual um ano)
- uma Data Limite para pesquisa

O select deve retornar todos os registros que tenham a data (DataAlteracao) + período de validação <= (menor ou igual) a data limite indicada pelo usuário:

Ou seja: a data cadastrada no banco, acrescida do ao período em dias, deve ser menor ou igual a data indicada. Isso para gerar uma listagem com todos os registros que precisam ser reavaliados até a data indicada, pois ultrapassaram o período de validade.

O problema é que a função DateAdd é para somar um período a determinada data, mas nesse caso acho que precisaria fazer o contrário, subtrair o período da data indicada (30/07/2005). Isso porque não tenho como somar o período a cada data dos registros no banco, pois isso seria necessário trazer a tabela inteira e varrer registro a registro na memório comparando.

Ex:
===
Período = 365 (um ano)
Data indicada usuário = 30/07/2005

Registros DtCorte
01 20/06/2004
02 15/02/2004
03 01/08/2004
04 05/06/2005
05 10/02/2005
06 01/07/2005
07 01/08/2005

Registros selecionados com SQL
01
02

Agora se eu alterar o período somente:
===============================
Período = 120 (4 meses)
Data indicada usuário = 30/07/2005

Registros selecionados com SQL
01
02
03
05

Alguma idéia de como fazer isso?

Obrigado
MARIOZNETO 09/07/2005 15:02:51
#93134
deixa ver se eu entendi:

você quer colocar uma data, e aparecer os registros apenas >= ou <= 365 dias.

é Isso ?
LUIS.HERRERA 09/07/2005 15:13:01
#93135
Não MariozNeto

Tenho uma data no MDB.
O usuário informa:
- o período de validade em dias
- a data limite para pesquisa

O Select tem que pegar todos os registros onde a data cadastrada, somada ao perído em dias é <= (menor ou igual) a data limite informada, como no exemplo hipotético acima.
MARIOZNETO 09/07/2005 15:24:34
#93137

é isso?

dim Vdata as date

Vdata = cdate(txtdata.text) - número_dias

select * from Tabela where Campo <= cdate(txtdata.text) and campo >= vdata

Será que é isso ?

Desculpe minha Ignorà¢ncia...
LUIS.HERRERA 09/07/2005 16:12:30
#93142
Valeu MariozNeto era quase isso. Ficou assim:

select * from Tabela Where (((Tabela.cmpData) <= #" & Format(Vdata, "mm/dd/yyyy") & "#))

Nota: Quando os meses são diferentes 30 e 31 dias, este cálculo com valores em dias pode apresentar diferença, certo? tipo um dia a mais ou a menos dependendo do caso e no mês de fevereiro pode ser pior.

Tem alguma forma de fazer isso com precisão de calcular por mês mesmo?

A única alternativa que encontrei foi deixar o usuário cadastrar o número de dias para representar um bimentre, 1 semestre, 1 ano ou 2 anos, etc...assim ele define a periodicidade de atualização. Mas isso pode causar problemas de um ou mais dias como dito acima.

Muito obrigado
USUARIO.EXCLUIDOS 09/07/2005 16:37:12
#93146
Resposta escolhida
Citação:

O select deve retornar todos os registros que tenham a data (DataAlteracao) + período de validação <= (menor ou igual) a data limite indicada pelo usuário:


e

Citação:

O problema é que a função DateAdd é para somar um período a determinada data, mas nesse caso acho que precisaria fazer o contrário, subtrair o período da data indicada (30/07/2005). Isso porque não tenho como somar o período a cada data dos registros no banco, pois isso seria necessário trazer a tabela inteira e varrer registro a registro na memório comparando.



Se você informar um número negativo na função DateAdd você terá um subtração ao invés de uma adição de dias.

... WHERE DataAlteracao <= DateAdd( "d", PeriodoValidacao * -1, DataLimite )
FABIO.ALEXANDRE 09/07/2005 23:17:04
#93177
Bom, c entendi bem + q é isso q vc precisa

Select * frm tabela where dateadd('d'," & txtDias & ",campo_Data_Cadastro) <=#" & txtDate & "#"



ESPERO TER AJUDADO
Tópico encerrado , respostas não são mais permitidas