Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta Entre Datas Com Adoquery


mcsmarmcs

Pergunta

Estou fazendo consultas com datas usando o componente TQuery, porem, estou migrando para AdoQuery e as consultas são um pouco diferentes. O banco de dados é o MySQL e eu estou pesquisando em apenas um campo, chamado nascimento. O que devo modificar no código abaixo para que esta consulta de datas funcione?

query1.Close;

query1.SQL.Clear;

query1.SQL.Add('SELECT * FROM cliente');

query1.SQL.Add('WHERE nascimento>=:Pdata1 and nascimento<=:Pdata2');

query1.ParamByName('Pdata1').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker1.Date);

query1.ParamByName('Pdata2').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker2.Date);

query1.Open;

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
query1.Close;

query1.SQL.Clear;

query1.SQL.Add('SELECT * FROM cliente');

query1.SQL.Add('WHERE nascimento>=:Pdata1 and nascimento<=:Pdata2');

query1.ParamByName('Pdata1').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker1.Date);

query1.ParamByName('Pdata2').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker2.Date);

query1.Open;

mcsmarmcs, a sugestão do colega jo_user está correta - utilizar between é o mais adequado - mas acredito que a principal questão no seu caso seja a forma como você está passando os parâmetros. Quando utilizar parametrização, indique o tipo de dado que você está passando (e espera receber na SQL) para que não ocorram problemas.

Por ex., você montou seu SQL comparando o tipo data (date) com o parâmetro, logo este é o tipo que você deveria passar ao parâmetro, de modo que a etapa que ocorre entre o valor passado e a query a ser processada pelo banco seja corretamente montada. Assim, seria preferível passar desta forma:

query1.ParamByName('Pdata1').AsDate :=DateTimePicker1.Date;

query1.ParamByName('Pdata2').AsDate :=DateTimePicker2.Date;

E este é o grande lance de utilizar a parametrização, já que você não precisa indicar qual formatação este campo data deve ter, já que você não está passando a data no formato texto - está simplesmente passando a data.

Mas se quiser realmente passar no formato texto, então você deve pensar de forma similar: se vai passar a data como um texto formatado então você tem que preparar seu SQL para receber desta forma:

query1.SQL.Add('WHERE nascimento>= STR_TO_DATE(:Pdata1, "%Y/%m/%d") and nascimento<=STR_TO_DATE(:Pdata2, "%Y/%m/%d")');

query1.ParamByName('Pdata1').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker1.Date);

query1.ParamByName('Pdata2').AsString:=FormatDateTime('YYYY/mm/dd', DateTimePicker2.Date);

Referência às funções Date e Time do MySQL.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...