Neste artigo estarei demonstrando como se fazer pesquisa no Delphi usando o componente ClientDataSet, eu criei um banco de dados e uma tabela chamada Pessoa que nos servirá de demonstração.
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 |
Crie uma nova Aplicação e uma nova conexão e adicione em nosso formulário os seguintes componentes e altere-os como descreve os quadro abaixo:
SqlDataSet
Name |
sdsPesquisa |
SqlConnection |
O nome da sua conexão |
CommandText |
select BAIRRO, CIDADE, DATACADASTRO, ENDERECO, IDPESSOA, NOME, SALARIO, TELEFONE from PESSOA WHERE IDPESSOA =:pIDPESSOA |
Onde temos WHERE IDPESSOA =:pIDPESSOA, estou passando o paramento através da variável pIDPESSOA para alimentar nossa claususula WHERE.
DataSetProvider
Name |
dspPesquisa |
DataSet |
sdsPesquisa |
ClientDataSet
Name |
cdsPesquisa |
ProviderName |
dspPesquisa |
DataSource
Name |
dtsPesquisa |
DataSet |
cdsPesquisa |
E por fim um DbGrid, mude a propriedade name para dbgPesquisa e a DataSource para dtsPesquisa. Adicione também um Edit e no evento OnKeyPress 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('pIDPESSOA').AsInteger:=StrToInt(Edit1.Text);
8 Open;
end;
end;
end;
Linha 1: Se a tecla for o Enter faça, #13 é a representação da tecla Enter.
Linha 3: Com o cdsPesquisa faça.
Linha 5: Fechamos o ClientDataSet cdsPesquisa, para receber o parâmetro.
Linha 6: Passamos o parâmetro pIDPESSOA.
Linha 7: Alimenta o parâmetro pIDPESSOA.
Linha 8: Abrimos o ClientDataSet..
Campo String
Vamos aprender agora como pesquisar por campo string, é muito simples, vamos modificar o nosso SQL, deixe-o como descrito a seguir:
SqlDataSet
Name |
sdsPesquisa |
SqlConnection |
O nome da sua conexão |
CommandText |
select BAIRRO, CIDADE, DATACADASTRO, ENDERECO, IDPESSOA, NOME, SALARIO, TELEFONE from PESSOA WHERE NOME :pNOME |
A única diferença a clausula Where, trocamos a compo IDPESSOA por NOME e retirei o singal de (=) afinal queremos passar o parâmetro.
Retorne ao evento OnkeyPress do Edit e modifique o código deixando igual ao descrito a seguir:
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('pNOME').AsString:=Edit1.Text+’%’;
8
Open;
end;
end;
end;
Só mudei a linha 7 para alterarmos o nome do parâmetro, e não convertermos em integer, afinal o campo edit já é string.
LIKE: Com este operador, podemos comparar cadeias de caracteres utilizando padrões de comparação (Wildcard) para um ou mais caracteres. Normalmente o caracter percentual (%) substitui zero, um ou mais caracteres e sublinha (_) substitui um caractere.
Utilizando a combinação desses caracteres especiais com o que se quer localizar, pode-se conseguir uma variedade muito grande de expressões. Veja na tabela abaixo:
Expressão |
Explicação |
LIKE ‘A%’ |
Todas as Palavras |
LIKE ‘%A’ |
Todas que terminem com a letra A |
LIKE ‘%A%’ |
Todas que tenham a letra A em qualquer posição |
LIKE ‘A_’ |
String de dois caracteres que tenham a primeira letra A e o segundo caractere seja qualquer outro. |
LIKE ‘_A’ |
String de sois caracteres cujo primeiro caractere seja qualquer um e a última letra seja A |
LIKE ‘_A_’ |
String de três caracteres cuja segunda letra seja A, independentemente do primeiro ou do último caractere. |
LIKE ‘%A_’ |
Todos que tenham a letra A na penúltima posição e a última seja qualquer outro caractere |
LIKE ‘_A%’ |
Todos que tenham a letra A na segunda posição e o primeiro caractere seja qualquer um. |
CONTAINING: Este operador tem a mesma função do LIKE, com a diferença que ele não difere se maiúsculo ou minúsculo, ele também busca em qualquer parte do nome ou seja se você digitar João ele trará João Carlos, Carlos João, Roberto João da Silva e etc.
Exemplo
select
BAIRRO,
CIDADE,
DATACADASTRO,
ENDERECO,
IDPESSOA,
NOME,
SALARIO,
TELEFONE from PESSOA
WHERE NOME Containing
:pNOME
Fico por aqui, até o próximo arigo.
Rubens Antunes
Autor do Livro: Delphi – Faça Uma Aplicação Comercial