[firebase-br] Lentidao para abrir a lista de precos

Fausto fausto.s.a em uol.com.br
Seg Jun 2 11:19:32 -03 2008


Rubens - Solucao Empresarial escreveu:
> Bom dia Pessoal to precisando de uma mao
> tenho um cadastro de 10000 itens e leva 25 segundos para abrir
> a seguinte rotina - se o usuario clicar no campo descricao ele coloca os produtos em ordem alfabetica e /ou se clicar no codigo ele abre a lista em ordem de codigo, pelo que pude entenbder ele esta puxando os 10000 itens toda vez como posso agilizar isso?
> Alguem pode me dar uma ideia?
> Agradeco a atencao - abaixo ta a rotina que uso
> 
> procedure Tpesq_produto.edt_descricaoEnter(Sender: TObject);
> begin
> //  edt_codigo.Clear;
>   edt_descricao.Text := '';
>   if edt_codigo.Text = '' then
>     begin
>     Dados.Produtos.Close;
>     Dados.Produtos.SQL[0] := 'Select * from produtos';
>     Dados.Produtos.SQL[1] := 'order by Descricao';
>     Dados.Produtos.Open;
>     edt_descricao.SetFocus;
>     end
> end;
> 
> procedure Tpesq_produto.edt_codigoEnter(Sender: TObject);
> begin
>   edt_descricao.Clear;
>   edt_codigo.Text    := '';
>   Dados.Produtos.Close;
>   Dados.Produtos.SQL[0] := 'Select * from produtos';
>   Dados.Produtos.SQL[1] := 'order by codigo1';
>   Dados.Produtos.Open;
>   edt_codigo.SetFocus
> end;

Amigo, experimente utilizar *ClientDataSet* e faça o select apenas uma 
vez, depois, com os dados em memória, é só reordenar o clientdataset 
pela propriedade *IndexFieldName*.
Seria interessante você analisar a forma como esta trazendo os dados.. 
(Select *), não seria o caso de ter um edit para pesquisar apenas os 
produtos que inicia com alguma letra?
E você precisa mesmo de todos os campos??
Pense em algo como:
var SqlTxt:String;
begin
   VarSql := 'SELECT CODIGO,NOME,PRECO,QTDE'+#13#10+
             'FROM PRODUTOS'                +#13#10+
             'WHERE (NOME LIKE ' +QuotedStr(Edit1.Text)+'%)';
   Dados.Produtos.SQL.Text := VarSql;
end;

Fausto





Mais detalhes sobre a lista de discussão lista