PROGRESSO DURANTE PROCESSAMENTO

AMELORP 20/11/2009 17:13:13
#328285
Tenho umas consultas UPDATE e gostaria de informar ao usuario o progresso dessas consultas...ou seja, mostrar um percentual ou algo parecido que ele perceba em que [Ô]pé está[Ô] os processamentos do sistema...exemplo: tenho uma função de calcular médias dos alunos...e esse processamentos demora um pouco..todas as consultas estão assim: cn.execute [Ô]UPDATE....[Ô] são vários assim....queria que o usuario ficasse sabendo o que está se passando...já coloquei uma ampulheta..mas queria algo mais transparente pro usuario...alguem poderia me ajudar?
MARCOSLING 20/11/2009 17:36:44
#328291
Tenho quase certeza que vc já postou essa dúvida, mas lá vai...

Creio que isso não seja possível, pois vc está executando uma DML em massa.
A não ser que vc faça um cursor, mas aí você perde em performance.

Então, é o seguinte: vc prefere enfeitar o sistema ou ter performance?
AMELORP 20/11/2009 17:46:22
#328294
na verdade queria que o usuario pudesse ter noção do que esta acontecendo..porque as vezes tem usuario aperriado que aperta tudo quanto é tecla pensando que esta demorando...mas agradeço


Citação:

MARCOSLING escreveu:
Tenho quase certeza que vc já postou essa dúvida, mas lá vai...

Creio que isso não seja possível, pois vc está executando uma DML em massa.
A não ser que vc faça um cursor, mas aí você perde em performance.

Então, é o seguinte: vc prefere enfeitar o sistema ou ter performance?

MARCOSLING 20/11/2009 17:49:31
#328295
Por acaso o processamento está muito demorado?
AMELORP 23/11/2009 08:38:39
#328377
Citação:

MARCOSLING escreveu:
Por acaso o processamento está muito demorado?

Às vezes sim...
EDERMIR 23/11/2009 08:55:17
#328378
AMELORP.

Se você está fazendo um UPDATE para cada aluno é possível mostrar o andamento. Se você simplesmente envia o comando UPDATE para o banco de dados calcular de uma só vez, o processamento fica aguardando a resposta do banco então não é possível checar a posição.

Se você faz um update por turma, então a medição pode ser feita com o parâmetro TURMA (xx% de turmas atualizadas).


Enfim, conforme o MARCOSLING já foi bem claro, você perde com a performance pois a cada comando UPDATE o banco é lido. A não ser que você ponha o índice do banco com o conteúdo da cláusula WHERE. Neste caso a performance melhora para ambos os casos (TODOS ou PARTE), sabendo-se que a parte terá performance PIOR que o TODO.
TECLA 23/11/2009 09:03:24
#328379
Uma coisa não ficou claro, você está usando UM ÚNICO UPDATE ou uma série dele?
MARCOSLING 23/11/2009 10:12:11
#328381
Citação:

AMELORP escreveu:
MARCOSLING escreveu:
Por acaso o processamento está muito demorado?
Às vezes sim...



O que vc pode fazer é:

- Se vc quiser colocar um barra de progresso, vc poderia quebrar o seu update em grupos. Isso seria menos ruim.
- Uma outra questão que vc deve considerar é revisar o seu update. As vezes a lentidão pode estar na forma de como vc faz o update.
- Se vc estiver usando sqlserver, vc poderia usar stored procedure

Tópico encerrado , respostas não são mais permitidas