fazer uma consulta por data, DD/MM

Delphi

20/01/2014

estou com dificuldades de fazer uma consulta entre duas datas, não estou conseguindo colocar a editmask só com o dia e mês __/__,
e também não estou conseguindo fazer a consulta , alguem pode me ajudar ?
Moabe Oliveira

Moabe Oliveira

Curtidas 0

Respostas

Douglas

Douglas

20/01/2014

Moabe, para colocar o MaskEdit com dia e mês você terá que colocar o seguinte formato abaixo
na propriedade editMask.
!99/99/;1;_ 

Agora só não entendi a questão da consulta entre datas. O que você quer fazer?
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

certo, consegui colocar a mask DD/MM, agora quero fazer uma consulta entre duas datas, e mostrar no dbgrid os cadastros que tem aquela data
estou usando esse código mais nao ta dando certo
begin
  With DataModule1.Table_Membros Do
Begin
ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
ConsultaAniver.Parameters.ParamByName('datai').Value := datetimepicker1.date;
ConsultaAniver.Parameters.ParamByName('dataf').Value := datetimepicker2.date;
ConsultaAniver.open;
GOSTEI 0
Douglas

Douglas

20/01/2014

certo, consegui colocar a mask DD/MM, agora quero fazer uma consulta entre duas datas, e mostrar no dbgrid os cadastros que tem aquela data
estou usando esse código mais nao ta dando certo
begin
  With DataModule1.Table_Membros Do
Begin
ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
ConsultaAniver.Parameters.ParamByName('datai').Value := datetimepicker1.date;
ConsultaAniver.Parameters.ParamByName('dataf').Value := datetimepicker2.date;
ConsultaAniver.open;


Acerte o seu código para seguinte forma abaixo:

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
ConsultaAniver.ParamByName('datai').Value := QuotedStr(datetimepicker1.date);
ConsultaAniver.ParamByName('dataf').Value := QuotedStr(datetimepicker2.date);
ConsultaAniver.open;


Aguardo o seu feedback.
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

o código roda, mas quando mando clico no button da o erro ' tipo de dados imcompativel na expressão de criterio'
GOSTEI 0
Douglas

Douglas

20/01/2014

Moabe, o erro acontece quando você da o Open na query?
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

coloquei esse código em um button, quando clico no button pra executar esse código, da esse erro
GOSTEI 0
Leandro Chiodini

Leandro Chiodini

20/01/2014

Boa tarde,

A sua data na tabela?
ela esta formatada para "DD/MM"

caso nao, provavelmente esta dando erro pq
temos uma data DD/MM/YYYY e uma DD/MM

O oracle retorna erro, entao acredito que deva ser isso..
mais O amigo Douglas, acredito que seja a melhor pessoa para a resposta.

:D

att,
Chiodini
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

é, na tabela no access esta como DD/MM
GOSTEI 0
Douglas

Douglas

20/01/2014

Uma correção no código, desculpe pelo erro.

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
ConsultaAniver.ParamByName('datai').Value := QuotedStr(FormatDateTime('dd/mm/yyyy', datetimepicker1.date));
ConsultaAniver.ParamByName('dataf').Value := QuotedStr(FormatDateTime('dd/mm/yyyy', datetimepicker2.date));
ConsultaAniver.open;


Moabe, agora só temos que saber em que momento esta ocorrendo este erro.
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

agora esta dando erro nessa linha
procedure TForm_ConAniver.SpeedButton2Click(Sender: TObject);
begin
  With Datasource1 Do
Begin
ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
//ConsultaAniver.ParamByName('datai').Value := QuotedStr(FormatDateTime('dd/mm/yyyy', datetimepicker1.date));
ConsultaAniver.ParamByName('dataf').Value := QuotedStr(FormatDateTime('dd/mm/yyyy', datetimepicker2.date));
ConsultaAniver.open;
end;


no lugar de datetimepicker1.date , eu queria usar o edit mask, só com o dia e mês
GOSTEI 0
Douglas

Douglas

20/01/2014

é, na tabela no access esta como DD/MM


Moabe, como esta neste formato acima no Access então tente da forma abaixo:

Uma correção no código, desculpe pelo erro.

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between  :DATAI AND :DATAF ');
ConsultaAniver.ParamByName('datai').Value := QuotedStr(FormatDateTime('dd/mm', datetimepicker1.date));
ConsultaAniver.ParamByName('dataf').Value := QuotedStr(FormatDateTime('dd/mm', datetimepicker2.date));
ConsultaAniver.open;
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

descupe-me pelo erro eu, na tabela do access, esta como DD/MM/YYYY, mais quero fazer a consulta apenas pelo dia e mês
GOSTEI 0
Douglas

Douglas

20/01/2014

Moabe, então a sua consulta será da seguinte forma abaixo:

  ConsultaAniver.Close;
  ConsultaAniver.SQL.CLEAR;
  ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE MONTH(DataNascimento) BETWEEN  :MESDATAI AND :MESDATAF ');
  ConsultaAniver.SQL.ADD('AND DAY(DataNascimento) BETWEEN  :DIADATAI AND :DIADATAF ');
  ConsultaAniver.ParamByName('MESDATAI').Value := QuotedStr(FormatDateTime('mm', datetimepicker1.Date));
  ConsultaAniver.ParamByName('MESDATAF').Value := QuotedStr(FormatDateTime('mm', datetimepicker2.date));
  ConsultaAniver.ParamByName('DIADATAI').Value := QuotedStr(FormatDateTime('dd', datetimepicker1.date));
  ConsultaAniver.ParamByName('DIADATAF').Value := QuotedStr(FormatDateTime('dd', datetimepicker2.date));
  ConsultaAniver.open;


OBS: Agora só tem um detalhe. Fazendo desta forma você vai resultar tudo que estiver entre o período do mês e dia
que você esta consultando independente do ano.

Espero ter chegado no resultado da sua pergunta aguardo feedback.
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

nesse ultimo código que voc postou tive que colocar 'parameters' pra rodar, e outra questão, eu queria que pesquisasse pelo maskedit no lugar do datetimepicker
GOSTEI 0
Fabio Cardoso

Fabio Cardoso

20/01/2014

Amigo qual banco de dados voce esta usando??
GOSTEI 0
Fabio Cardoso

Fabio Cardoso

20/01/2014

no firebird eu uso sem problema nenhum o codigo abaixo:

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between :DATAI AND :DATAF ');
ConsultaAniver.ParamByName('datai').asdate := strToDate(SeuMaskedit1.text);
ConsultaAniver.ParamByName('dataf').asdate := strToDate(SeuMaskedit2.text);
try
ConsultaAniver.open;
except
end;

Obs: o campo dataNascimento tem que ser date se for string nao precisa de transformar em date
GOSTEI 0
Fabio Cardoso

Fabio Cardoso

20/01/2014

no firebird eu uso sem problema nenhum o codigo abaixo:

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between :DATAI AND :DATAF ');
ConsultaAniver.ParamByName('datai').asdate := strToDate(SeuMaskedit1.text);
ConsultaAniver.ParamByName('dataf').asdate := strToDate(SeuMaskedit2.text);
try
ConsultaAniver.open;
except
end;

Obs: o campo dataNascimento tem que ser date se for string nao precisa de transformar em date e o formato da date na maskedit e o formato que voce criou no banco
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

estou usando bando de dados Access, lá a data esta gravada completa, DD/MM/YYYY, mas quero consultar pelo maskedit só com DD/MM;
seu código esta dando erro amigo,
nessas duas linhas:
ConsultaAniver.ParamByName('datai').asdate := strToDate(Maskedit1.text);
ConsultaAniver.ParamByName('dataf').asdate := strToDate(Maskedit2.text);

'.asdate' esta grifado em vermelho, tentei sem elas tbm n vai.. :S
GOSTEI 0
Douglas

Douglas

20/01/2014

Moabe, fazendo a pesquisa pelo MaskEdit da forma abaixo irá funcionar, acredito que agora, encerraremos o seu problema.

  ConsultaAniver.Close;
  ConsultaAniver.SQL.CLEAR;
  ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE MONTH(DataNascimento) BETWEEN  :MESDATAI AND :MESDATAF ');
  ConsultaAniver.SQL.ADD('AND DAY(DataNascimento) BETWEEN  :DIADATAI AND :DIADATAF ');
  ConsultaAniver.Parameters.ParamByName('MESDATAI').Value := copy(MaskEdit1.Text, 1, 2);
  ConsultaAniver.Parameters.ParamByName('MESDATAF').Value := Copy(MaskEdit2.Text, 4, 2);
  ConsultaAniver.Parameters.ParamByName('DIADATAI').Value := copy(MaskEdit3.Text, 1, 2);
  ConsultaAniver.Parameters.ParamByName('DIADATAF').Value := copy(MaskEdit4.Text, 4, 2);
  ConsultaAniver.open;


Utilizando a função copy você vai pegar no MaskEdit, somente dia e depois o mês, para efetuar a sua consulta.
GOSTEI 0
Douglas

Douglas

20/01/2014

estou usando bando de dados Access, lá a data esta gravada completa, DD/MM/YYYY, mas quero consultar pelo maskedit só com DD/MM;
seu código esta dando erro amigo,
nessas duas linhas:
ConsultaAniver.ParamByName('datai').asdate := strToDate(Maskedit1.text);
ConsultaAniver.ParamByName('dataf').asdate := strToDate(Maskedit2.text);

'.asdate' esta grifado em vermelho, tentei sem elas tbm n vai.. :S


Utilize "AsDateTime", que irá funcionar.
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

Primeiramente gostaria de agradecer a Douglas Claudio e Fabio Cardoso, pela atenção, resolvi meu problema com seu ultimo código Douglas!
muito obrigado!
bom vou postar o código novamente, poq pode servir de consulta para alguem no futuro ne..
ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE MONTH(DataNascimento) BETWEEN  :MESDATAI AND :MESDATAF ');
ConsultaAniver.SQL.ADD('AND DAY(DataNascimento) BETWEEN  :DIADATAI AND :DIADATAF ');
ConsultaAniver.Parameters.ParamByName('MESDATAI').Value := copy(MaskEdit1.Text, 1, 2);
ConsultaAniver.Parameters.ParamByName('MESDATAF').Value := Copy(MaskEdit2.Text, 4, 2);
ConsultaAniver.Parameters.ParamByName('DIADATAI').Value := copy(MaskEdit1.Text, 1, 2);
ConsultaAniver.Parameters.ParamByName('DIADATAF').Value := copy(MaskEdit2.Text, 4, 2);
ConsultaAniver.open;
GOSTEI 0
Douglas

Douglas

20/01/2014

Moabe, obrigado pelo feedback. Podem encerrar o tópico.
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

desculpem-me pelo inconveniente, mas o código rodou e deu um resultado, mas não é o q quero ainda,
bom: estou com esse código no ADOQuery

select * From Membros
where DataNascimento

e esse código no botão de consulta

ConsultaAniver.Close;
ConsultaAniver.SQL.CLEAR;
ConsultaAniver.SQL.ADD('SELECT * FROM Membros WHERE DataNascimento between :DATAI AND :DATAF ');
ConsultaAniver.parameters.ParamByName('datai').Value := FormatDateTime('dd/mm', StrToDate(Jvmaskedit1.text));
ConsultaAniver.parameters.ParamByName('dataf').Value := FormatDateTime('dd/mm', StrToDate(Jvmaskedit1.text));
ConsultaAniver.open;

mais só esta me retornando o dia e mês exato, da consulta, sendo que quero que: seja entre a data pesquisada,
tipo: entre 24/04 e 24/05, e mostre as datas independente do ano!
GOSTEI 0
Moabe Oliveira

Moabe Oliveira

20/01/2014

me ajudem, rs
GOSTEI 0
POSTAR