Filtro com edit, quero limpar o edit e retornar os dados?

Delphi

28/10/2007

Olá pessoal, é o seguinte: Tenho aqui o trio CDS+provider+SQLDataSet da paleta DBX, e uso Firebird 2.0

Bom o negicio é sobre uma consulta que tenho aqui com o CDS

Primeiro tenho um dbgrid ligado no datasource ligado no CDS, aonde eu chamo o CDS no form no evento oncreate assim

procedure TFrmAssociadosHerdeiro.FormCreate(Sender: TObject);
begin
  inherited;
  {:Para abrir o DataSource sempre que iniciar o form}
  dsPadrao.DataSet:=dm.cdsAssociados;
  dsConsulta.DataSet:=dmConsulta.cdsCon_Associados;
  {:fazendo un select da listagem}
  dmConsulta.cdsCon_Associados.Close;
  dmConsulta.cdsCon_Associados.CommandText:=´Select matricula, admissao, associado from associados´;
  dmConsulta.cdsCon_Associados.Open;
end;

Para listar todos os ´Associados´ cadastrados no dbgrid.

Depois tenho aqui um edit.text que faço um tipo de filtro para buscar por associado assin no evento onchange do mesmo
procedure TFrmAssociadosHerdeiro.Edit1Change(Sender: TObject);
var
  sql, texto: string;
begin
  inherited;
begin
   //dsPadrao.DataSet:=dmconsulta.cdsCon_Associados;
  {:Primeiro passo os dados para serem filtrados no edit com mais de um nome e com espaços
  serve para filtrar tipo assim ADR SERV, JOAO DE S.... etc}
  if Trim(EDIT1.text) = ´´ then
     exit;
     texto := AnsiUpperCase(StringReplace(TrimRight(EDIT1.text),´ ´,´¬ ´,[rfReplaceAll]))+´¬´;
     {:Aqui faço novamente o select agora passando por parametros}
     {:Obs Este select já esta cadastrado do DM com o parametro para o CDS reconheçer o parametro "ASSOCIADO"}
     dmConsulta.cdsCon_Associados.Close;
     dmConsulta.cdsCon_Associados.CommandText:=´select matricula, associado from associados where upper(associado) like :associado´;
     {:Chamando o CDS para consultas por paramtros que satisfaça a condição}
     dmConsulta.cdsCon_Associados.Params[0].AsString := UpperCase(´¬´ + Texto + ´¬´);//passando os dados da variavel texto
     dmConsulta.cdsCon_Associados.Open;
   end;
end;



Bom tudo funciona certinho, consulto normal abro a listagem, mais o que eu não consegui fazer foi ´[u:3f88472768]Ao limpar o Edit.Text retornar novamente todos os dados no DBGrid, volta apenas alguns[/u:3f88472768]´

Como devo fazer para ao limpar o Edit os dados retornem ao normal?

Obrigado
Adriano.


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

28/10/2007

Desculpem mais esta parte aqui
[color=red:1058fb1644]
procedure TFrmAssociadosHerdeiro.Edit1Change(Sender: TObject); var sql, texto: string; begin inherited; begin //dsPadrao.DataSet:=dmconsulta.cdsCon_Associados; {:Primeiro passo os dados para serem filtrados no edit com mais de um nome e com espaços serve para filtrar tipo assim ADR SERV, JOAO DE S.... etc} if Trim(EDIT1.text) = ´´ then exit; texto := AnsiUpperCase(StringReplace(TrimRight(EDIT1.text),´ ´,´¬ ´,[rfReplaceAll]))+´¬´; {:Aqui faço novamente o select agora passando por parametros} {:Obs Este select já esta cadastrado do DM com o parametro para o CDS reconheçer o parametro ´ASSOCIADO´} dmConsulta.cdsCon_Associados.Close; dmConsulta.cdsCon_Associados.CommandText:=´select matricula, associado from associados where upper(associado) like :associado´; {:Chamando o CDS para consultas por paramtros que satisfaça a condição} dmConsulta.cdsCon_Associados.Params[0].AsString := UpperCase(´¬´ + Texto + ´¬´);//passando os dados da variavel texto dmConsulta.cdsCon_Associados.Open; end; end;

[/color:1058fb1644]

É assim
procedure TFrmAssociadosHerdeiro.Edit1Change(Sender: TObject);
var
  sql, texto: string;
begin
  inherited;
begin
   //dsPadrao.DataSet:=dmconsulta.cdsCon_Associados;
  {:Primeiro passo os dados para serem filtrados no edit com mais de um nome e com espaços
  serve para filtrar tipo assim ADR SERV, JOAO DE S.... etc}
  if Trim(EDIT1.text) = ´´ then
     exit;
     texto := AnsiUpperCase(StringReplace(TrimRight(EDIT1.text),´ ´,´¬ ´,[rfReplaceAll]))+´¬´;
     {:Aqui faço novamente o select agora passando por parametros}
     {:Obs Este select já esta cadastrado do DM com o parametro para o CDS reconheçer o parametro "ASSOCIADO"}
     dmConsulta.cdsCon_Associados.Close;
     dmConsulta.cdsCon_Associados.CommandText:=´select matricula, associado from associados where upper(associado) like :associado´;
     {:Chamando o CDS para consultas por paramtros que satisfaça a condição}
     dmConsulta.cdsCon_Associados.Params[0].AsString := UpperCase(Texto);//passando os dados da variavel texto
     dmConsulta.cdsCon_Associados.Open;
   end;
end;
Ou seja eliminei o CURINGA na variavel Texto no final do codigo.

Mais a duvida continua amigos.


GOSTEI 0
Martins

Martins

28/10/2007

você deseja q ao limpar o Edit o filtro deixe de existir e os dados do DBGrid voltem como antes?

Bons códigos.


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/10/2007

Sim, exactamente, não num botton, pois ai sei que posso usar o mesmo codigo que esta no onshow que postei no começo.

Pq assim quando limpo o edit ele não retorna a listagem como estava no começo.


GOSTEI 0
Martins

Martins

28/10/2007

Sim, exactamente, não num botton, pois ai sei que posso usar o mesmo codigo que esta no onshow que postei no começo. Pq assim quando limpo o edit ele não retorna a listagem como estava no começo.


Se vc está codificando no OnChage, pq não faz a validação lá.

if Edit.Text = ´´ then
etc...

Já tentou?


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/10/2007

Não testei ainda, mais acho que o codigo que estava procurando é este aqui

coloque no evento onchange do seu edit, assim à medida em que o usuário vai digitando o nome a query vai retornando os valores. begin Qrygrid.active:=false; QryGrid.SQL.Clear; QryGrid.SQL.Add(´SELECT * FROM USUARIOS WHERE USERX starting with=´ +quotedstr(edtConsulta.Text)); qrygrid.active:=true; end; no evento onactivate do form digite qrygrid.refresh; edtconsulta.setfocus; edtconsulta.text:=´´;


Obrigado amigo


GOSTEI 0
Adriano_servitec

Adriano_servitec

28/10/2007

Não testei ainda, mais acho que o codigo que estava procurando é este aqui [quote:e752d6b409]coloque no evento onchange do seu edit, assim à medida em que o usuário vai digitando o nome a query vai retornando os valores. begin Qrygrid.active:=false; QryGrid.SQL.Clear; QryGrid.SQL.Add(´SELECT * FROM USUARIOS WHERE USERX starting with=´ +quotedstr(edtConsulta.Text)); qrygrid.active:=true; end; no evento onactivate do form digite qrygrid.refresh; edtconsulta.setfocus; edtconsulta.text:=´´;


Obrigado amigo[/quote:e752d6b409]

Alias acabo de testar este código, e não sei quem disse que isso ai funciona, achei este codigo na nete, mais não serviu pra nada aqui pra mim :(

Bom, continuando, e fuçando, daqui e dali descobri como eu precisava realmente.

Basta usar este codigo aqui no dbgrid no evento okKeyPress
procedure TFrmAssociadosHerdeiro.DBGrid1KeyPress(Sender: TObject;
  var Key: Char);
var
  Str: string;
begin
  inherited;
  Str:= Edit1.Text;
  if (key = #8) then
  begin
    Delete(Str,Length(Edit1.Text),1);
    Edit1.Text:= Str;
  end
  else
  begin
    Edit1.Text:= Str + key;
  end;
end;


E sacrificar a linha do if no codigo do CDS
[b:e752d6b409]// if Trim(EDIT1.text) = ´´ then
// exit;[/b:e752d6b409]

procedure TFrmAssociadosHerdeiro.Edit1Change(Sender: TObject);
var
  sql, texto: string;
begin
  inherited;
begin
   //dsPadrao.DataSet:=dmconsulta.cdsCon_Associados;
  {:Primeiro passo os dados para serem filtrados no edit com mais de um nome e com espaços
  serve para filtrar tipo assim ADR SERV, JOAO DE S.... etc}
 // if Trim(EDIT1.text) = ´´ then
 //    exit;
     texto := AnsiUpperCase(StringReplace(TrimRight(EDIT1.text),´ ´,´¬ ´,[rfReplaceAll]))+´¬´;
     {:Aqui faço novamente o select agora passando por parametros}
     {:Obs Este select já esta cadastrado do DM com o parametro para o CDS reconheçer o parametro "ASSOCIADO"}
     dmConsulta.cdsCon_Associados.Close;
     dmConsulta.cdsCon_Associados.CommandText:=´select matricula, associado from associados where upper(associado) like :associado´;
     {:Chamando o CDS para consultas por paramtros que satisfaça a condição}
     dmConsulta.cdsCon_Associados.Params[0].AsString := UpperCase(Texto);//passando os dados da variavel texto
     dmConsulta.cdsCon_Associados.Open;
   end;
end;


Ai pessoal, morreu a nota, agora sim funciona do jeito que deve ser.

Obrigado pessoal.


GOSTEI 0
POSTAR