Fórum Filtro com edit, quero limpar o edit e retornar os dados? #348086
28/10/2007
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
Curtir tópico
+ 0Posts
28/10/2007
Adriano_servitec
[color=red:1058fb1644]
[/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;Mais a duvida continua amigos.
Gostei + 0
29/10/2007
Martins
Bons códigos.
Gostei + 0
29/10/2007
Adriano_servitec
Pq assim quando limpo o edit ele não retorna a listagem como estava no começo.
Gostei + 0
29/10/2007
Martins
Se vc está codificando no OnChage, pq não faz a validação lá.
if Edit.Text = ´´ then
etc...
Já tentou?
Gostei + 0
29/10/2007
Adriano_servitec
Obrigado amigo
Gostei + 0
29/10/2007
Adriano_servitec
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
Clique aqui para fazer login e interagir na Comunidade :)