Stainle,

Como vc informou qual o banco de dados, estou pressupondo que seja o 
firebird e neste contexto, sugiro 2 coisas:

1) no Seleciona( select * from ... )... substitua o * pelo nome dos 
campos que vc irá utilizar. Explicando: qd vc utiliza select * from 
tabela, provoca um fetch all nela mesmo que a instrução contenha uma 
cláusula where, o que tornará a consulta lenta, dependendo do tamanho da 
tabela

2) se a lookup source contiver muitas linhas, sugiro procurar uma outra 
alternativa, pq este componente é perfeito para aplicações desktop mas 
em aplicações client server ou multicamadas, um lookup de muitas linhas 
pode se tornar um pesadelo em termos de performance.


stainle2003 escreveu:
>
>
> Boa Tarde, novamente pedindo ajuda.
> Estou gradativamente mudando meu sistema de BDE para Multicamadas, 
> portando deixo de usar Query para usar ClientDataSet acessando a 
> máquina que tem o BSS, o que acontece:
> Preciso fazer Lookup e sei que fica lento, então na Query(BDE) em 
> OnCalcFields eu uso uma função que Seleciona(select * from ...) UMA 
> dentre 4 chaves(00211001, 00211***, 0021****, 002*****), por exemplo, 
> de uma tabela para que eu ache um valor para calcular o Preço Líquido 
> por exemplo da tabela principal; acontece que no BDE(query) funciona 
> com uma velocidade até que razoável, mas ao mudar para o 
> ClientDataSet, fica uma calamidade, até mudei a função chamada no 
> OnCalcFields para ao invés de SQL eu passei a usar da forma abaixo, 
> mas mesmo assim não me alegrou, será que vou ter que continuar a usar 
> o BDE, neste caso ???
> procedure TDados.ver_desconto;
> var
> wscodigo : string;
> begin
> wscodigo := Dados.CDSEstCodes.Value;
>
> Dados.CDSDes.Close;
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> Dados.CDSDes.Open;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := copy(wscodigo, 8, 3);
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := copy(wscodigo, 6, 1);
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := copy(wscodigo, 5, 1);
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> exit;
> end;
> Dados.CDSDes.IndexFieldNames := 'nrolinha;grupo_ini;sub_ini;nropeca';
> Dados.CDSDes.SetKey;
> Dados.CDSDesNrolinha.Value := StrToInt(copy(wscodigo, 1, 3));
> Dados.CDSDesGrupo_Ini.AsString := '*';
> Dados.CDSDesSub_Ini.AsString := '*';
> Dados.CDSDesNropeca.AsString := '***';
> if Dados.CDSDes.GotoKey then
> begin
> Dados.CDSEstDesconto.Value := Dados.CDSDesDesco05.Value;
> end;
>
> end;
>
> procedure TDados.CDSEstCalcFields(DataSet: TDataSet);
> begin
> ver_desconto();
> Dados.CDSEstLiquido.Value := Dados.CDSEstPv1.Value * (1 - 
> Dados.CDSEstDesconto.Value / 100);
> end;
>
> procedure TDados.CDSDesBeforeOpen(DataSet: TDataSet);
> begin
> Dados.CDSDes.IndexName := 'DEFAULT_ORDER';
> end;
> grato
> Stainle
>























































































-- 
[]’s.

Evandro Siqueira
Programador de Sistemas
L’essentiel Lingerie
(79) 3254-5511 Ramal 218
skype: evandro.lessentiel



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a