Ajuda vencimento em delphi
Seguinte, eu tenho um programa que preciso que me liste os clientes com pagamento vencido, consegui fazer ele listar usando uma query e jogando os clientes em um list box na tela principal, até ai tudo bem realizei os testes no final de maio e estava funcionando tranquilamente, agora em junho ele está apresentando problemas e não consigo saber o porquê. Se hoje é 04/06/2017 e o vencimento for 04/05/2017 ele não me mostra por exemplo agora se o vencimento for 04/04/2017 ele funciona normal, segue abaixo o código que estou usando.
Obs: Uso banco de dados Access
procedure TFrmPri.SpeedButton4Click(Sender: TObject); begin listbox1.Clear; listbox2.Clear; listbox3.Clear; with dm.Query do begin close; sql.Clear; sql.Add('select * from Clientes where Vencimento <='+FormatDateTime('#dd/mm/yyyy#',now)); sql.Add('Order by Vencimento'); open; end; dm.Query.First; while not (dm.Query.Eof) do begin Listbox1.Items.Add(dm.Query.FieldByName('Código').AsString); Listbox2.Items.Add(dm.Query.FieldByName('Nadador').AsString); Listbox3.Items.Add(dm.Query.FieldByName('Vencimento').AsString); Dm.Query.Next; end; Dm.Query.Close; end;
Obs: Uso banco de dados Access
Diego Pereira
Curtidas 0
Respostas
Robson Morais
04/06/2017
aparentemente o sql está certo, não sei como é a formatação da data para o access, mas tentou pegar o mesmo sql que ele gera e rodar no access para ver o retorno ? tem faturas vencidas para listar ? vi que está utilizando now, ele pega a data do computador, a data dele está certa ?
GOSTEI 0
Diego Pereira
04/06/2017
Sim, a data está correta, e tem uma fatura de teste vencida para teste a partir do mês 04/04/2017 ela para de funcionar antes dessa data o sql funciona normal, ainda não fiz o teste no acess, farei logo que eu sair do trabalho e chegar em casa.
GOSTEI 0
Júlio Ferreira
04/06/2017
Amigo,
Aconselho você a começar usar consultas parametrizadas. Principalmente, quando é data, o Delphi pode dar algum problema com o cliente da conexão com o banco de dados. Queries parametrizadas são quase infalíveis!
No seu exemplo, seria algo como:
Aconselho você a começar usar consultas parametrizadas. Principalmente, quando é data, o Delphi pode dar algum problema com o cliente da conexão com o banco de dados. Queries parametrizadas são quase infalíveis!
No seu exemplo, seria algo como:
with dm.Query do begin close; prepared := true; sql.Clear; sql.Add('select * from Clientes where Vencimento <= :pDataVencimento' ) sql.Add('Order by Vencimento'); parameters.parambyname( 'pDataVencimento' ).DataType := ftDate; parameters.parambyname( 'pDataVencimento' ).Value := Now; Open;
GOSTEI 0
Robson Morais
04/06/2017
discordo, tenho um projeto grande que funciona em mais de 30 terminais ao mesmo tempo com conexões locais e online em mais 14 empresas e nunca tive problema aquela maneira, mas claro com o access nunca fiz, mas ai pode ser outra coisa.
GOSTEI 0
Júlio Ferreira
04/06/2017
Amigo,
Se vc usa essa solução em mais de 30 terminais e em 14 empresas e nunca teve problema... qual é o seu problema então? Se funciona, pq não está funcionando?
Se vc usa essa solução em mais de 30 terminais e em 14 empresas e nunca teve problema... qual é o seu problema então? Se funciona, pq não está funcionando?
GOSTEI 0
Robson Morais
04/06/2017
O problema é do nosso amigo Diego Pereira e não meu, só discordei do comentário que fez que o delphi pode dar problema com o cliente da conexão com o banco de dados da maneira que ele utiliza.
GOSTEI 0
Diego Pereira
04/06/2017
Já consegui resolver amigos, o problema esta no formato da data, não sei qual motivo mas se aplicar a data no formato de mm/dd/yyyy eu consigo ter sucesso na minha aplicação, mas tentarei da forma como Jcmferreira disse, para ver se consigo um desempenho maior tanto no meu aprendizado com a linguagem, quanto no meu software.
Obrigado,desde já
Att: Diego Dias Pereira
Obrigado,desde já
Att: Diego Dias Pereira
GOSTEI 0