Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Pesquisa Dinâmica: Delphi

Veja nesta quick como desenvolver uma pesquisa o qual não sabemos o campo que o usuário irá escolher, ou seja, ele poderá escolher o campo nome, endereço ou outro.

 

Vamos desenvolver uma pesquisa o qual não sabemos o campo que o usuário irá escolher, ou seja, ele poderá escolher o campo nome, endereço ou outro.

Temos a seguinte tabela dentro do banco de dados Pesquisa:

 

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

 

Deixe a propriedade CommandText do SqlDataSet vazia, porque iremos passar a instrução SQL no ClientDataSet. Abra o formulário e coloque o componente ComboBox da paleta Win32 e altere a propriedade name para cbxCampo. No evento onShow do formulário coloque o seguinte código:

 

procedure TForm1.FormShow(Sender: TObject);

var

  I: Integer;

begin

  dtpInicial.Date:=Date - 30;

  dtpFinal.Date:=Date;

 

 

  for I := 0 to (cdsPesquisa.FieldCount)-1 do

  begin

    if cdsPesquisa.Fields[I].DataType in [ftString,ftWideString,ftFixedChar] then

      cbxCampo.Items.Add(cdsPesquisa.Fields[I].FieldName);

  end;

  cbxCampo.ItemIndex:=0;

end;

 

Preencha apenas o que estiver em negrito, desta maneira criamos um laço que irá pecorrer todos fields do ClientDataSet, e determino que desejo apenas os campos string, WideString e Char, assim não buscamos os campo numéricos e data. Logo preencho o combobox cbxCampo com os campos do ClientDataset.

 

No evento OnKeyPress do Edit coloque o seguinte código:

 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

 if key = #13 then // #13 é o símbolo que representa a tecla Enter

  begin

    if (cbxCampo.Text <> EmptyStr) and //Verifico se o comboBox foi preenchido

     (Edit1.Text <> EmptyStr) then //verifico se o edit possui algum valor

    begin

      With cdsPesquisa do

      begin

        Close;

        CommandText:='select BAIRRO, CIDADE, DATACADASTRO,  ‘+

‘ENDERECO, IDPESSOA, '+

                     'NOME, SALARIO, TELEFONE from PESSOA Where '+

                     cbxCampo.Text+ ' LIKE '+QuotedStr(Edit1.Text+'%');

        Open;

      end;

    end;

  end;

end;

 

A grande chave desta pesquisa é o comando CommandText do ClientDataSet, se você selecionar o componente ClientDataSet perceberá que ele possui esta propriedade que serve para receber a instrução SQL.

cbxCampo.Text+ ' LIKE '+QuotedStr(Edit1.Text+'%'); Esta linha sta representada pela seguinte instrução SQL:

NOME LIKE (Valor a ser pesquisado)+’%’ que representa o inicio da palavra.

 

Para fecharmos com chave de ouro, precisamos alterar apenas uma propriedade no componente DataSetProvider, selecione ele e passe para True a propriedade Options/PoAllowCommandTex esta propriedade Serve para direcionarmos a instrução SQL para o ClientDataSet e não para o SqlDataSet.

 

Execute a aplicação e veja como ficou na tela a seguir:

 


 

Fico por aqui, até o próximo artigo.

 

Rubens Antunes

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

-->




    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Nelson Pereira De Castro
Seria interessante você mostrar como faz essas pesquisas dinâmicas com tabelas relacionadas (joins).


em 15/9/2010 08:18 - Responder

 

[Comentário do autor]   Rubens Antunes
Nelson
 
Basta você colocar no commandText o join, qualquer dúvida é só me mandar um email
 


em 19/9/2010 11:02 - Responder
 

Danilo Aurelio
Otimo Artigo, uma duvida e quando no Cbox tiver Data de Nascimento? ai terei que colocar DATANASCIMENTO por ex para não dar erro na instrução SQL?

Outra duvida, eu queria criar apenas um formulario de busca para todo o meu sistema, ai passar os parametros da busca por codigo no botão que chama o formulario de busca, isso é possivel? sera que existe algum artigo ensinando?


ObrigadO!!!




em 13/10/2011 09:52 - Responder

 



[Este post ainda não foi associado a uma sequência]
Autor
Rubens Antunes

Programador Delphi desde de 2004 e Autor do Livro Delphi - Faça Uma Aplicação Comercial


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03