Fórum Duvida com DbGrid #361734

28/07/2008

0

Bom dia amigos, tenho uma duviva:

Eu tenho em meu programa um ClientDataSet con todas as cidades de brasil. Entre os campos do ClienteDataSet eu tenho a que estado essa cidade pertence.

Tenho tambem um dbgrid conectado com esse ClientDataSet de Cidades, sera que eu posso filtrar as cidades que vao aparecer no dbgrid pelo campo estado?? que so apareçam as cidades de un determinado estado.

Desde ja agradeço sua ajuda.


Eduardocar83

Eduardocar83

Responder

Posts

28/07/2008

Marco Salles

pode ser feito assim

cds.close;
cds.Filter:=´EstadO like ´+QuotedStr(´¬´+edit1.text);
cds.Filtered:=true;
cds.Open;
showmessage(cds.Filter);


ou assim

cds.close;
cds.Filter:=´EstadO = ´+QuotedStr(edit1.text);
cds.Filtered:=true;
cds.Open;
showmessage(cds.Filter);


ou assim

cds.close;
cds.Filter:=´EstadO like ´+QuotedStr(´¬´+AnsiUpperCase(edit1.text));
cds.Filtered:=true;
cds.Open;
showmessage(cds.Filter);


nos Tres casos é casesensitive .... se quiser Desconsiderar Maiscula de Minuscula tem que usar o evento FilterRecord e fazer codificação
extra ... Com a propriedade fielter , não me recordo de ter esta
possibilidade ...


Responder

Gostei + 0

28/07/2008

Eduardocar83

Obrigado Marco Salles, mas fazendo desse jeito abrindo e fechando o ClientDataSet, ele vai trazer os dados denovo do servidor ne?? porque meu ClientDataSet esta conectado com um DataSetProvider e SqlDataSet.

Sera que tenho que utilizar um ClientDataSet adicional para filtrar os dados, e desse jeito naum ter que trazer os dados denovo do server??

Vc saberia me disser como se conectan dois ClientDataSet, pra um filtrar os dados do outro??? muitao obrigado, amigo.


Responder

Gostei + 0

28/07/2008

Marco Salles

Obrigado Marco Salles, mas fazendo desse jeito abrindo e fechando o ClientDataSet, ele vai trazer os dados denovo do servidor ne?? porque meu ClientDataSet esta conectado com um DataSetProvider e SqlDataSet. Sera que tenho que utilizar um ClientDataSet adicional para filtrar os dados, e desse jeito naum ter que trazer os dados denovo do server?? Vc saberia me disser como se conectan dois ClientDataSet, pra um filtrar os dados do outro??? muitao obrigado, amigo.


sim , tem o [b:55d4caba8f]clonecursor[/b:55d4caba8f] ...

Assim

clonecds.CloneCursor(SeuClientDataset,true);

Ligue um DataSource e um DataSet a Este cloneCds;

e faça :

clonecds.close;
clonecds.Filter:=´Estado like ´+QuotedStr(AnsiUpperCase(edit1.text)+´¬´);
clonecds.Filtered:=true;
clonecds.open;


p:s

Veja a diferença , fundamental neste caso

clonecds.CloneCursor(SeuClientDataset,true);
showmessage(clonecds.ProviderName);

e

clonecds.CloneCursor(SeuClientDataset,false);
showmessage(clonecds.ProviderName);


portanto o segundo parametro deve ser true neste caso ...


Responder

Gostei + 0

28/07/2008

Eduardocar83

Ola Marco Salles, o que me preocupava e que no primeiro codigo que vc postou tinha cdsCidades.close e cdsCidades.Open.

Dae eu acho que ele atualiza os dados desde o servidor o qual eu nao quero (tenho cdsCidades+dspCidades+sqlConection).

Depois pesquisando um pouco mais, vi que nao e necessario fechar e abrir o cdsCidades para filtrar, e so colocar a propriedade cdsCidades.filtered := True. Assim ele limita a visibilidade dos registros de acordo com o cdsCidades.filter := ´ xxxxxx ´;

Valeu amigo, tem me ajudado muito suas dicas. Obrigado.


Responder

Gostei + 0

28/07/2008

Eduardocar83

aqui va um link muito bom, onde se fala do ClientDataSet http://www.comunidade-firebird.org/cflp/downloads/CFLP_T002.PDF


Responder

Gostei + 0

28/07/2008

Marco Salles

Ola Marco Salles, o que me preocupava e que no primeiro codigo que vc postou tinha cdsCidades.close e cdsCidades.Open. Dae eu acho que ele atualiza os dados desde o servidor o qual eu nao quero (tenho cdsCidades+dspCidades+sqlConection). Depois pesquisando um pouco mais, vi que nao e necessario fechar e abrir o cdsCidades para filtrar, e so colocar a propriedade cdsCidades.filtered := True. Assim ele limita a visibilidade dos registros de acordo com o cdsCidades.filter := ´ xxxxxx ´;


amigo , tem mais coisas entre o ceu e a terra e etc...

eu não abri e fechei o cds para ele simplesmente filtrar não
eu abri e fechei o cds para mudar em rum time [b:210a2976ae]o valor do filtro ...[/b:210a2976ae]coisa que voce não consegue faze-lo com ele aberto ....

Agora se voce quiser em designer , pode colocar um filtro (FIXO) lá e depois é so habilitar a propriedade Fieltered

Se eu soubesse que voce queria so isso .....


Responder

Gostei + 0

28/07/2008

Marco Salles

eu não abri e fechei o cds para ele simplesmente filtrar não eu abri e fechei o cds para mudar em rum time o valor do filtro ...coisa que voce não consegue faze-lo com ele aberto ....


Errata ... fiz ums teste aqui e veifiquei que para mudar o valor do Filtro em Rum Time , basta fazer cds.Filtered:=false; e alterar

cds.Filtered:=false;
cds.Filter:=edit1.text+´ Like´+QuotedStr(edit2.Text+´¬´);
cds.Filtered:=true;


p:s .. Edit1.text é o Nome do campo ... Assim voce pode criar vários
filtros em Rum Time


Eu não sei se o codigo inicial aonde tinha o close e o open foi um codigo
meu do mybase que eu peguei etc... Mas sua obeservação foi persistente e muito bem colocada ...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar