[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