Precisamos localizar quando um cliente foi cadastrado, para isso iremos aprender como pesquisar por campo Date.
Na nossa aplicação exemplo temos um banco de dados com a tabela Pessoa contendo os seguintes campos:
TABELA PESSOA
IDPESSOA | INTEGER |
NOME | VARCHAR(30) |
ENDERECO | VARCHAR(45) |
BAIRRO | VARCHAR(25) |
CIDADE | VARCHAR(25) |
TELEFONE | VARCHAR(10) |
SALARIO | NUNERIC(10,2) |
DATACADASTRO | DATE |
Em nosso SqlDataSet coloque a seguinte instrução SQL:
SqlDataSet
Name | sdsPesquisa |
SqlConnection | O nome da sua conexão |
CommandText | select BAIRRO, CIDADE, DATACADASTRO, ENDERECO, IDPESSOA, NOME, SALARIO, TELEFONE from PESSOA Where DATACADASTRO =:pDATA |
Nesta instrução fazemos a comparação e passamos o parâmetro.
No Evento OnKeyPress do Edit coloque o seguinte código:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
1 if key = #13 then
2 begin
3 With cdsPesquisa do
4 begin
5 close;
6 FetchParams;
7 Params.ParamByName('pDATA').AsDate:= StrToDateTime(Edit1.Text);
8 Open;
end;
end;
end;
Mudamos somente a linha 7, ou seja, pegamos a data provida o do edit e passamos a por parâmetro para a nossa instrução SQL.
DATETIMEPICKER: O Delphi possui o componente DateTimePicker, que nos mostra um calendário com as datas, assim não precisamos digitar a data e sim selecioná-la em nosso componente.
Adicione um DateTimePicker da paleta WIN32, e mude a propriedade name pata dtpInicial. Coloque também um buttom e mude a propridade name btnOK e a caption Para OK. Dê dois clique no botão OK e coloque o seguinte código:
procedure TForm1.btnOKClick(Sender: TObject);
begin
begin
With cdsPesquisa do
begin
close;
FetchParams;
Params.ParamByName('pDATA').AsDate:=dtpInicial.Date;
Open;
end;
end;
end;
BETWEEN: Da maneira anterior precisamos saber a data que foi cadastrado a pessoa, mas e se nós não sabermos, para encontrar precisamos fazer um busca entre intervalos, ou seja, eu quero todas as pessoas cadastradas entre 01/08/2005 até 27/08/2010, para isso iremos utilizar o operador BETWEEN, ele nos retorna um resultado entre intervalos, não precisa ser somente de datas, mas também campos numéricos, como por exemplo: Queremos saber quais são as pessoas que tem o salário entre 1200,00 e 3000,00 reais.
Retorne em nossa instrução SQL e altere clausula WHERE, deixando-a de acordo a descrito a seguir:
Where DATACADASTRO BETWEEN :DATAINI AND :DATAFIM
O que acabei de fazer é passar dois parâmetros um para receber a data inicial e o outro para receber a data final, o restante o operador BETWEEN faz.
Obs.: Precisamos conferir sempre se o delphi definiu os parâmetros, caso o nome do parâmetro seja diferente do campo ele costuma não defini-lo para isso com o compoenente SqlDataSet selecionado dê dois clique na reticência em frente a propriedade Params e abrirá a uma tela, preencha de acordo com a tela a seguir:
DataType: É o tipo do parâmetro, ou seja, ele poderá ser string, integer e outros.
Name: O Nome do parâmetro.
ParamType: Se o parâmetro será do tipo de entrada ou saída, ptInput é Saída e ptOutput para entrada, ele poderá ser os dois também.
Em nosso formulário adicione mais um DateTimePicker e a mude a propriedade name para dtpFinal. No código do botão OK deixe o código como o descrito a seguir:
procedure TForm1.btnOKClick(Sender: TObject);
begin
1 if key = #13 then
2 begin
3 With cdsPesquisa do
4 begin
5 close;
6 FetchParams;
7 Params.ParamByName('DATAINI').AsDate:=dtpInicial.Date;
8 Params.ParamByName('DATAFIM').AsDate:=dtpFinal.Date;
9 Open;
end;
end;
end;
Neste código na linha 7 o parâmetro DATAINI receberá a primeira a o parâmetro DATAFIM receberá a segunda data.
DateTimiPicker: Este componente tem diversas propriedade uma delas a propriedade Data, essa propriedade uma data, você pode modificá-la mas seria mais prudente se fizermos isso em nosso formulário.
No eventro OnShow do Formulário coloque o seguinte código:
procedure TForm1.FormShow(Sender: TObject);
begin
dtpInicial.Date:=Date;
end;
Ele adicionará a data do dia no primeiro DateTimePicker, mas queremos colocar a data de 30 dias atrás no primeiro e no segundo a data atual:
procedure TForm1.FormShow(Sender: TObject);
begin
dtpInicial.Date:=Date - 30;
dtpFinal.Date:=Date;
end;
Fico por aqui e até o próximo artigo.
Rubens Antunes
Autor do Livro: Delphi – Faça Uma Aplicação Comercial