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.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo