Buscar

Curso Delphi – Criando uma Aplicação do Início ao fim - Parte 6

nome

Rubens Antunes

Rubens Antunes, Autor do Livro Delphi Faça uma Aplicação Comercial e Desenvolvedor Delphi desde de 2004.

Curso Delphi – Criando uma Aplicação do Início ao fim - Parte 6

Pesquisa

Neste artigo irei mostrar como fazer pesquisa no Delphi, é algo muito simples e interessante.

Iremos começar utilizando Filtro, na continuidade do curso irei demonstrar como criar um ClientDataSet dinâmico.

Abra o Data Module dmCliente e adicione no mesmo o componente Sqldataset da paleta DbExpress e tecle Alt+F11 e instancie em nosso data module o UdmPrincipal, logo depois na propriedade SqlConnection do sqldataSet escolha dmPrincipal.ConexaoSisCom, e mude a propriedade name para sdsPesqCliente, fazendo isso tecle na reticências em frente a propriedade CommandText e na tela que se abre, preencha de acordo com os dados a seguir:

select
NOME,
BAIRRO,
CELULAR,
CEP,
CIDADE,
CPF_CNPJ,
ENDERECO,
IDCLIENTE,
RG_INSC,
TELEFONE1,
TELEFONE2,
UF
from CLIENTE

Neste select estamos trazendo todos os registros da tabela cliente. Adicione em nosso data module dmcliente o componente DataSetProvider e altere as seguintes propriedades:


Adicione também um ClientDataSet e altere as seguintes propriedades:


Após Conectarmos os componentes crie um novo formulário em File/new/Form –Delphi e mude a propriedade name para frmPesquisa e salve-o como UfrmPesquisa.

Adicione em nosso formulário um Combobox da paleta Standard e altere a propriedade name para cbbCampos, este componente receberá todos os campos de nossa tabela cliente, adicione também um label da paleta Standard e mude a propriedade Caption para Escolha Um Campo. Coloque também um Edit da paleta Standard e mude a propriedade name para edtPesquisar e depois um label logo em cima do edtPesquisar e mude a propriedade caption para Valor a Pesquisar. Coloque um DbGrid e mude a propriedade name para dbgPesquisa. Coloque um DataSource e mude a propriedade name para Dts. Seu formulário deverá ficar assim:


Vamos agora codificar, selecione o formulário frmPesquisa e no evento OnShow coloque o seguinte código:

procedure TfrmPesquisa.FormShow(Sender: TObject);
var
I: Integer;
begin
for I := 0 to (Dts.DataSet.FieldCount)-1 do
begin
if Dts.DataSet.Fields[I].DataType in [ftString,ftWideString,ftFixedChar] then
cbbCampos.Items.Add(Dts.DataSet.Fields[I].FieldName);
end;
end;

Este evento é disparado assim que o formulário for criado. Ele traz todos os campos da tabela, representado pelo for, a propriedade FieldCount, representa a total de campos e o -1 para percorrer todos os campos, logo em seguida fazemos uma condicional, ou seja, queremos apensas os campos do tipo String ou Char representado pelo DataType, ou seja o tipo do campo, se ele for verdadeiro ele adicionará através da propriedade add os campos na propriedade items, a mesma que possue no comboBox. já o Dts.DataSet.Fields[I].fieldName é o nome do campo provindo do DataSet.

Selecione o EdtPesquisar e coloque o seguinte código no evento OnKeyPress:

procedure TfrmPesquisa.edtPesquisarKeyPress(Sender: TObject; var Key: Char);
begin
1. if key = #13 then // #13 é o símbolo que representa a tecla Enter
2. begin
3. if (cbbCampos.Text <> EmptyStr) and //Verifico se o comboBox foi preenchido
4. (edtPesquisar.Text <> EmptyStr) then //verifico se o edtPesquisar possue algum valor
5. begin
6. Dts.DataSet.Filter := 'Upper('+cbbCampos.Text+') like '+ //Passo os valores a
pesquisar na propriede Filter
7. QuotedStr(UpperCase(edtPesquisar.Text)+'%');
8. Dts.DataSet.Filtered := True; //Ativo a propriedade Fieltered
9. if not Dts.DataSet.Active then //Se o filtro não estiver ativo, eu apenas abro o DataSet
10. Dts.DataSet.Open;
11. end;
12. end;
end;

linha 1: Eu determino que assim que o usuário teclar Enter o código será executado.
linha 3 e 4: Verifico se o comboBox está vazio e o edit também, se ele estiver ele irá sair do if.
Linha 6: Passamos a instrução SQL pra o filtro.
Linha 8: Apenas ativo o filtro.
Linha 9 e 10: Se o filtro não estiver ativo, apenas abro a tabela;

Selecione agora o DbgPesquisa e coloque o seguinte código no evento OnClose:

procedure TfrmPesquisa.dbgPesquisaDblClick(Sender: TObject);
begin
Close;
end;

No formulário frmCadCliente na Ação Pesquisar coloque o seguinte código:

procedure TfrmCadCliente.AC_PesquisarExecute(Sender: TObject);
begin
inherited;
try
frmPesquisa:=TfrmPesquisa.Create(self);
frmPesquisa.Dts.DataSet:=dmCliente.cdsPesqCliente;
frmPesquisa.ShowModal;
finally
With dmcliente.cdsCadCliente do
begin
Close;
FetchParams;
Params.ParamByName('pIDCLIENTE').AsInteger:=
dmCliente.cdsPesqClienteIDCLIENTE.AsInteger;
Open;
end;
freeAndNil(frmPesquisa);
end;
end;

Neste código estamos criando o formulário frmPesquisa e logo depois passando o qual o Dataset que ele irá utilizar, ou seja, você pode criar o cadastro de Produto e utilizar o mesmo formulário de pesquisa, trocando apenas o Dataset do DataSource.

Execute a aplicação.

Como forma de aprendizado crie o formulário de cadastro de produto, ele seguirá o mesmo padrão do formulário de cadastro de cliente e na hora de pesquisar basta apenas na hora de chamar o formulário de pesquisa mudar o Dataset do nosso DataSource Dts.

Conclusão: Neste artigo eu procurei fazer algo simples, mas com bastante produtividade, uma vez que os dados já estão em memória não há a necessidade de pesquisarmos mais no banco de dados, sendo que, quando precisarmos fazer uma busca mais detalhada, aí sim teremos que usar as instruções SQL. No próximo artigo estarei escrevendo sobre campo autoIncremento, Abraço e até lá.

Por: Rubens Antunes
Autor do Livro: Delphi – Faça Uma Aplicação Comercial

Publicidade

Vote no artigo




Quantidade de votos: 7 votos
Aceitação: 20%


Detalhes do artigo

Categoria: Banco de dados
Adicionado dia: 07/12/09
Por: Rubens Antunes
Visualizado: 39189 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009