Filtro com edit, quero limpar o edit e retornar os dados?
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
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
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.
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
Curtidas 0
Respostas
Adriano_servitec
28/10/2007
Desculpem mais esta parte aqui
[color=red:1058fb1644]
[/color:1058fb1644]
É assim
Ou seja eliminei o CURINGA na variavel Texto no final do codigo.
Mais a duvida continua amigos.
[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;Mais a duvida continua amigos.
GOSTEI 0
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.
Bons códigos.
GOSTEI 0
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.
Pq assim quando limpo o edit ele não retorna a listagem como estava no começo.
GOSTEI 0
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
28/10/2007
Não testei ainda, mais acho que o codigo que estava procurando é este aqui
Obrigado amigo
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
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