Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kania

[Resolvido] Caulando valores entre datas

Recommended Posts

Olá pessoal, estou criando um pagina para averiguação de vencimento da mensalidade dos associados, o problema é que estou me perdendo dentro das consultas (select) dentro do BD.

 

Vejam, tenho minha tabela e criei para facilitar os campos:

 

campo DATA_CADASTRO

 

para ver o dia em que o associado cadastrou e acrescentar mais 30 dias a esta data ai sta funcionando tudo certinho, no INSERT criei um variavel assim:

 

data_cadastro = date() + 30 e inchamo ela no INSERT para cadastrar no bd na hora do cadastro do associado a data do próximo vencimento que será acrescentado no campo PROXIMO_VENCIMENTO

 

campo PROXIMO_VENCIMENTO

 

neste campo é dado um UPDATE quando o status do associado muda de BLOQUEADO para ATIVO usando amesma regra citada acima (date()+30) isto acontece automaticamente no UPDATE.

 

campo UTIMO_PAGAMENTO

 

este campo marca no momento de ATIVAR o associado ou na hora que é informado o PAGAMENTO de mais uma mensalidade a data deste pagamento

 

Bom com estas informações estou tentando criar um select que me traga algumas informações do BD tipo:

 

Pagamentos vencidos:

Enviar e-mail para a lista de associados com pagamentos vencidos

Enviar e-mail aos asssociados cuja a mensalidade vence nos próximos 7 dias

Listar todos os associados cuja a mensalidade vence nos próximos 7 dias

 

para isto estou fazendo o seguinte select que não sta dando certo:

 

Para trazer os associados que estão vencendo dentro do próximos 7 dias, o erro esta em que o SELECT esta trazendo datas que não deverias tipo o vencimento da mensalidade é no dia 20/5/2008 (esta cadastrado desta forma no bd) e o SELECT esta trazendo datas como 12/6/2008 ou seja falta 1 mês para o vencimento e ele esta trazendo como se fosse dentro dos 7 dias

 

atual = date() + 7
					  hoje = date()
Set RS = Server.CreateObject("adodb.recordset")
SQL = "select * from associados where proximo_vencimento BETWEEN '"&hoje&"' AND '"&atual&"' order by nome"

para listar somente os associados que estão com suas mensalidades vencidas estou fazendo o seguinte SELECT, o memso erro que acima, ele esta trazendo datas erradas como vencimento da mensalidade é no dia 20/5/2008 e o SELECT esta trazendo datas como 12/6/2008

 

hoje = date()
		
Set RS = Server.CreateObject("adodb.recordset")
SQL = "select * from associados where proximo_vencimento < '"&hoje&"' order by nome"

bom não sei onde esta meu erro de lógica, mas acredito que o SELECT possa estar se perdendo na contagem das datas, não esta sabendo diferenciar datas como 16/5/2008 e 16/6/2008, acredito que ele esta fazendo a verificação somente pelo dia, hoje dia 16/5/2008 como pedi para trazer todos os associados com datas menores que data do dia de hoje não poderia trazer datas como 12/6/2208, mas esta trazendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a função DATEADD para somar ou subtrair dias (mes, ano) a determinada data.

 

Ex: dateAdd("d",7,date)

Compartilhar este post


Link para o post
Compartilhar em outros sites

OLá dei uma pesquisada na função que me passou e achei isto:

 

Function DataAdicional(DataAtual,Qtd_dias)
  NovaData = DateAdd("d",DataAtual,Qtd_dias)
  DataAdicional = NovaData
End Function

response.Write DataAdicional(now,"7")

Porem não consegui entender de onde esta vindo s valores das variaveis tipo

 

Variaveis DataAtual, Qtd_dias, nas outras tudo bem mas estas duas não entedi de onde elas pegam as informaç~eos para compor a fórmula, poderia me auxilar.

 

Lembrando que minha informações estão dentro de um BD logo sempre precisarei fazer o calculo usando estas informações para fazer o Select e imprimir na tela o resultado

 

 

fiz um teste para ver como o SELECT esta interpretando as datas e verifiquei o seguinte, mandei ordenar a listagem por data de vencimento (order by proximo_vencimento desc) conforme as datas cadastradas no BD e ele esta trazendo as datas comm seguin ordem:

 

15/5/2008

14/6/2008

14/5/2008

13/5/2008

12/6/2008

12/6/2008

 

na ordem contraria (order by proximo_vencimento asc)

 

12/6/2008

12/6/2008

13/5/2008

14/5/2008

14/6/2008

15/5/2008

 

 

Ou seja ele esta respeitando somente o dia e aparentemente ignorando os meses e anos da data, porque será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utiliza o exemplo que passei: dateAdd("d",7,date)

 

Seria algo assim:

<%
data = date 'aqui você informa a data que você quer que seja somada
totaldias = 6 'aqui você informa quantos dias devem ser somados

dataNova = dateAdd("d",totaldias,data)
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hargon assim, na questão de somar a data tual dias ou meses esta dando tudo certo o problem esta no SELECT com o banco de dados, veja:

 

hoje=date' Para pegar a data de hoje

'Conecto com o banco de dados
Set RS = Server.CreateObject("adodb.recordset")
'Faço a verificação se dentro da tabela existe alguma data inferior a data da variavel hoje, caso exista serão impressos na tela
'aqui é que esta o problema pois ele esta imprimindo datas como 12/6/2008 que na verdade é maior que a data atual
'mas que de algum forma ele esta interpretando sendo menor, ai que eu disse que não sei porque ele deve estar 
'utilizando como referencia somente o dia e não os meses e anos para saber qual é a data maior ou menor

SQL = "select * from associados where proximo_vencimento  < '"&hoje&"' order by nome"

estou ficando louco tentando achar o erro que acredito estar no SELECT, como fazer o SELECT avaliar a data em um todo e não somente o dia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

SQL = "select * from associados where proximo_vencimento  < #"&hoje&"# order by nome"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo problema, estou tentnado dar uma olhada em tutoriasi de instruções sql para ver se estou comendo bola em algum local, ou se tem algum outr forma de fazer o select para acabar com o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas que problema está apresentando? Algum erro em especifico ou não retorna o esperado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só não retorna o esperado como te falei, fiz um teste para ver como o SELECT esta interpretando as datas e verifiquei o seguinte, mandei ordenar a listagem por data de vencimento (order by proximo_vencimento desc) conforme as datas cadastradas no BD e ele esta trazendo as datas com a seguin ordem:

 

15/5/2008

14/6/2008

14/5/2008

13/5/2008

12/6/2008

12/6/2008

 

na ordem contraria (order by proximo_vencimento asc)

 

12/6/2008

12/6/2008

13/5/2008

14/5/2008

14/6/2008

15/5/2008

 

 

Ou seja ele esta respeitando somente o dia e aparentemente ignorando os meses e anos da data, porque será? Veja na lista que ele esta trazendo datas como 12/6/2008 que não deveria pois o select que eu fiz solicitei que ele trouxece somente as datas inferiores a data de hoje, outro detalhe é que na ordem ele não respeita os meses somente o dia, veja que os dia do mês 6 não estão em ordem crescente ou decrescente como deveria e sim misturados respeitando somente o dia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta isso:

SQL = "select * from associados where cDate(proximo_vencimento)  < #"&formatDateTime(hoje,2)&"# order by nome"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

cDate(proximo_vencimento) -> está convertendo para data caso você esteja utilizando data geral

 

## -> informa a consulta que se trata de data

 

formatDateTime(hoje,2)-> não sei como você estava armazenando a data na variável hoje, aí utilizei essa função para pegar somente a data no formato que queria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.