 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Kirk_guitar Aprendiz

Registrado: Sábado, 24 de Junho de 2006 Mensagens: 105 Localização: Belo Horizonte
|
Enviada: Qua Nov 08, 2017 1:00 pm Assunto: Dúvida sobre performace em loop de query [Resolvido] |
|
|
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 |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qua Nov 08, 2017 6:32 pm Assunto: |
|
|
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 |
|
 |
Kirk_guitar Aprendiz

Registrado: Sábado, 24 de Junho de 2006 Mensagens: 105 Localização: Belo Horizonte
|
Enviada: Qua Nov 08, 2017 7:14 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|