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:

aplicação executada

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