fazer uma consulta por data, DD/MM
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 ?
e também não estou conseguindo fazer a consulta , alguem pode me ajudar ?
Moabe Oliveira
Curtidas 0
Respostas
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.
Agora só não entendi a questão da consulta entre datas. O que você quer fazer?
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
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
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
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
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
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
20/01/2014
Moabe, o erro acontece quando você da o Open na query?
GOSTEI 0
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
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
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
20/01/2014
é, na tabela no access esta como DD/MM
GOSTEI 0
Douglas
20/01/2014
Uma correção no código, desculpe pelo erro.
Moabe, agora só temos que saber em que momento esta ocorrendo este 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
20/01/2014
agora esta dando erro nessa linha
no lugar de datetimepicker1.date , eu queria usar o edit mask, só com o dia e mês
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
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
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
20/01/2014
Moabe, então a sua consulta será da seguinte forma abaixo:
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.
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
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
20/01/2014
Amigo qual banco de dados voce esta usando??
GOSTEI 0
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
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
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
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
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
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
20/01/2014
Moabe, fazendo a pesquisa pelo MaskEdit da forma abaixo irá funcionar, acredito que agora, encerraremos o seu problema.
Utilizando a função copy você vai pegar no MaskEdit, somente dia e depois o mês, para efetuar a sua consulta.
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
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
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
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..
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
20/01/2014
Moabe, obrigado pelo feedback. Podem encerrar o tópico.
GOSTEI 0
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!
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
20/01/2014
me ajudem, rs
GOSTEI 0