Fórum Pesquisa entre datas #173327

05/08/2003

0

Quero fazer uma pesquisa entre datas via SQL ou qualquer outro jeito. Tenho dois Maskedit’s de modo que especifiquem duas datas para o período da pesquisa.
Quero que no DBGrid apareça todas os registros com datas que estejam neste intervalo.

Como é que eu faço?
Qual a rotina?

Denysk


Denysk

Denysk

Responder

Posts

06/08/2003

Rjanuzzi

Olá Denysk,

Eu já respondi 2 ou 3 perguntas sobre pesquisas com datas, dê uma pesquisada aí nas minhas menssagens q vc encontra.

rjanuzzi


Responder

Gostei + 0

06/08/2003

Denysk

Tudo bem q vc já tenha respondido, mas poderia responder outra vez? por favor, com detalhes.


Responder

Gostei + 0

06/08/2003

Lcarvalhoneto

Cara, tente o seguinte:

no objeto Query, na propriedade SQL do tipo TStrings digite o seguinte:

select * from TABELA
where CAMPODATA between :DataInicial and :DataFinal

na propriedate Params configure a DataInicial e a Final para:
DataType = ftDate
ParamType = ptInput

no código da aplicação:

procedure .......
begin
Query1.Close;
Query1.ParamByName(´DataInicial´).AsString := mskDataInicial.Text;
Query1.ParamByName(´DataFinal´).AsString := mskDataFinal.Text;
Query1.Open;
end;

se for via ADO, o
Query1.Params.ParamByName(´DataInicial´).AsString := mskDataInicial.Text;


Espero ter ajudado OK?


Responder

Gostei + 0

07/08/2003

Denysk

Amigo Carvalhoneto valeu pela ajuda.
Só tive uma pequena dificuldade, mas que nao tira o mérito de sua ajuda.
Em vez de .AsString tem que ser .AsDate e mudar o tipo do MaskEdit.

Query1.Close;
Query1.ParamByName(´DataInicial´).AsDate := strtodate(MaskEdit1.text);
Query1.ParamByName(´DataFinal´).AsDate := strtodate(MaskEdit2.text);
Query1.Open;

Valeu mesmo.

A propósito estou com um outro problema se puderes dar uma mão, fico muito agradecido.
Na mesma pesquisa quando clico no botao se o MaskEdit que esta mascarado para o formato data estiver preenchido apenas com o dia e o mês dá erro.

Como posso corrigir isso?


Responder

Gostei + 0

07/08/2003

Lcarvalhoneto

Amigo Carvalhoneto valeu pela ajuda. Só tive uma pequena dificuldade, mas que nao tira o mérito de sua ajuda. Em vez de .AsString tem que ser .AsDate e mudar o tipo do MaskEdit. Query1.Close; Query1.ParamByName(´DataInicial´).AsDate := strtodate(MaskEdit1.text); Query1.ParamByName(´DataFinal´).AsDate := strtodate(MaskEdit2.text); Query1.Open; Valeu mesmo. A propósito estou com um outro problema se puderes dar uma mão, fico muito agradecido. Na mesma pesquisa quando clico no botao se o MaskEdit que esta mascarado para o formato data estiver preenchido apenas com o dia e o mês dá erro. Como posso corrigir isso?


Não necessariamente colega, pois da forma que eu te falei, vc não precisaria converter o seu MaskEdit p/ o tipo Date, OK?
O parametro é do tipo Date, mas nada impede que vc passe ele como .AsString para que não precise converter o MaskEdit. Faça o teste p/ vc ver!

Query1.ParamByName(´DataInicial´).AsString := MaskEdit1.text;
-------------------------------------------------------------------------

OK, agora p/ tratarmos a data, temos várias formas, vou citar 2 delas OK?

1º - Ao invés de utilizar o componente MaskEdit, por que vc não usa o componente TDateTimePicker que fica na paleta Win32.

2º - Trate o erro que o Delphi retorna. Ex:
------------------------------------------------------------
procedure ....
var Data : TDateTime;
begin

try
Data := StrToDateTime(MaskEdit1.Text);
except
ShowMessage(´Data Inválida !!!´)
end;

end;
------------------------------------------------------------

Lembre-se, quando vc estiver rodando o programa pelo Delphi, ele retornará o mesmo erro. Quando vc estiver rodando somente o .exe, aí sim ele deiaxa de dar a msg de erro do Delphi e mostra somente a sua...

Espero ter ajudado!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar