ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Dúvida sobre performace em loop de query [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Kirk_guitar
Aprendiz
Aprendiz


Registrado: Sábado, 24 de Junho de 2006
Mensagens: 105
Localização: Belo Horizonte

MensagemEnviada: Qua Nov 08, 2017 1:00 pm    Assunto: Dúvida sobre performace em loop de query [Resolvido] Responder com Citação

Bom dia pessoal,

Eu estou com um dúvida referente à estrutura de repetição while para varrer uma query e editar seu conteúdo com relação à performace.
Se eu der um loop em uma query sem fazer o query.Edit, o loop é bem mais rápido do que quando uso o query.Edit.
Eu faço uma ideia do proque, mas eu gostaria de saber de vocês exatamente qual o motivo disso.

Estou perguntando isso porque tenho o seguinte trecho de código:
Código:

qryOrca.FIRST;
   qryOrca.DisableControls;
   WHILE NOT qryOrca.Eof DO
   BEGIN
      if (qryOrcaCODIGO.AsString <> '0000') and
         (qryOrcaNAOMODIFICAPRECO_CADASTRO.AsString <> 'S') then
      begin
         qryOrca.EDIT;
         qryOrcaMARCA.ASSTRING:='3';
         qryOrcaDESCONTOPERC.AsFloat := qryOrcaDESC_CADASTRO.AsFloat;
         qryOrcaPRECO.AsFloat        := qryOrcaPRECO_CADASTRO.AsFloat;
         qryOrcaTOTAL.AsFloat        := qryOrcaPRECO.AsFloat * qryOrcaQUANT.AsFloat;
         qryOrcaDESCONTO.AsFloat     := (qryOrcaQUANT.AsFloat * qryOrcaPRECO.AsFloat) - qryOrcaTOTAL.AsFloat;
         qryOrca.POST;
      end;
      qryOrca.NEXT;
   END;
   qryOrca.First;
   qryOrca.ENABLEControls;


Este código serve para voltar o valor original dos produtos na tela de venda. O problema é que se eu tiver por volta de 120 produtos na grid, este código demora por volta de 19 segundos para ser executado por completo. E 19 segundos é uma eternidade para o cliente. Gostaria de saber se tem alguma forma de melhorar isso.
A query que estou usando é o TIBOQuery com cacheUpdates ativado no Delphi 2007.


Editado pela última vez por Kirk_guitar em Qua Nov 08, 2017 7:10 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qua Nov 08, 2017 6:32 pm    Assunto: Responder com Citação

vc ta usando CachedUpdates? se nao, cada vez q vc da o post, deve ta gravando no banco
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Kirk_guitar
Aprendiz
Aprendiz


Registrado: Sábado, 24 de Junho de 2006
Mensagens: 105
Localização: Belo Horizonte

MensagemEnviada: Qua Nov 08, 2017 7:14 pm    Assunto: Responder com Citação

Pessoal, peço desculpas por ter aberto este tópico aqui sem necessidade.
Olhando mais atentamente para o código do sistema, descobri que a query estava amarada com um UserControl. Então toda hora que dava um Post nela, o sistema incluia um registro na tabela de logs do user control. Por isso a lentidão. Quando tirei o vínculo, a rotina foi executada em menos de 1 segundo.
kkkkkkkk.
Pra resolver eu estou gravando na tabela de logs do UserControl pela trigger da tabela de itens da venda, ou seja, direto pelo banco. Fiz uns testes aqui e não afetou a velocidade de gravação dos dados (continuou finalizando a rotina com menos de 1 segundo).
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB