ENCONTRAR DATAS CALCULO
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
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
deixa ver se eu entendi:
você quer colocar uma data, e aparecer os registros apenas >= ou <= 365 dias.
é Isso ?
você quer colocar uma data, e aparecer os registros apenas >= ou <= 365 dias.
é Isso ?
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.
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.
é 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...
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
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
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 )
Bom, c entendi bem + q é isso q vc precisa
Select * frm tabela where dateadd('d'," & txtDias & ",campo_Data_Cadastro) <=#" & txtDate & "#"
ESPERO TER AJUDADO
Select * frm tabela where dateadd('d'," & txtDias & ",campo_Data_Cadastro) <=#" & txtDate & "#"
ESPERO TER AJUDADO
Tópico encerrado , respostas não são mais permitidas