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