Filtrar dados da dbgrid

Delphi

12/11/2012

Ola pessoal,

Sei que tem um monte de posts sobre este assunto,
mas sabem que projetos diferentes, não concegui adaptar nenhum para o meu,

tenho um projeto bem simples que criei para isso, para que eu possa entender como funciona,

sabem que usar comandos de pesquisa acaba deixando lento quando tem bastante registros na tabela,

Gostaria entender como funciona os filtros,

tenho uma tabela no sqlserver, conectada ao delphi atraves de um tadoconnection
tem uma adoquery para inserir/deletar/alterar, etc.., onde tem o comando select * from
uso um datasource para exibir os dados da tabela em um dbgrid com o comando select * from
toda essa conexão esta dentro de um data module, o dbgrid no form1 com os botões, tedits, etc..

TEM ALGUMA ROTINA QUE FILTRE ESSES DADOS DO DBGRID QUANDO DIGITO ALGO EM UMA DAS TEDIT, SEM QUE FIQUE LENTO QUANDO TENHO MUITOS DADOS NA TABELA??


Desde ja agradeço muito!!!
Sikineli Strike

Sikineli Strike

Curtidas 0

Respostas

Luiz Menin

Luiz Menin

12/11/2012

Você poderia utilizar parametros em sua consulta SQL ao invés do *.
Outra alternativa seria utilizar os filtros do ClientDataSet. Ele é muito rápido pois consulta dados qua já estão em memória.
GOSTEI 0
Luiz Menin

Luiz Menin

12/11/2012

Um exemplo de filtro seria:

// Se for um valor em STR
ClientDataSet1.Filter := 'CAMPO_TABELA = ' + QuotedStr(edtValor.txt);

// Se for um valor INT
ClientDataSet1.Filter := 'CAMPO_TABELA = ' + IntToStr(edtValor.txt);

// Ativa filtro
ClientDataSet1.Filtered := True;
GOSTEI 0
Sikineli Strike

Sikineli Strike

12/11/2012

Um exemplo de filtro seria:

// Se for um valor em STR
ClientDataSet1.Filter := 'CAMPO_TABELA = ' + QuotedStr(edtValor.txt);

// Se for um valor INT
ClientDataSet1.Filter := 'CAMPO_TABELA = ' + IntToStr(edtValor.txt);

// Ativa filtro
ClientDataSet1.Filtered := True;


me desculpe amigo,

mas é o seguinte, coloco essa rotina na tedit, ou em um botão?
se for ele não encontra o dataset, dai tenho que cria-lo?
é pq é bem diferente do vb to bem perdido.

obrigado pela ajuda
GOSTEI 0
Luiz Menin

Luiz Menin

12/11/2012

Sim, você deve colocar essa rotina em um botão.
Pesquise sobre o componente TClientDataSet e adicione ao seu projeto. Ele é muito útil nesses casos.
GOSTEI 0
Luiz Menin

Luiz Menin

12/11/2012

Conseguiu fazer o filtro funcionar?
GOSTEI 0
Sikineli Strike

Sikineli Strike

12/11/2012

Conseguiu fazer o filtro funcionar?


eu estava procurando sobre o dataset,
mas dai baixei o sqlfull2012,
para tentar conectar com o unidac,

mas eu uso o win7, dai quando tento instalar o sql da erro,
"não foi possivel carregar arquivo ou assembly'system.version=4.0.0.0. etc etc etc e tal....."
diretório \appdata\local\microsoft_corporation\landingpage.exe_strongname_rypccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0\userconfig

O .NET Framework 4.0 ta blza ja tentei reparar e nada.

será que concigo uma solução para isso??

Valeu!!
GOSTEI 0
Sikineli Strike

Sikineli Strike

12/11/2012

Ainda por cima descobri que nem é o 2012
"gato por lebre"kkkkk
é o 2008 r2.
GOSTEI 0
POSTAR