Página 2 de 2

Problema com ADO

Enviado: 27 Mai 2021 10:07
por JoséQuintas
Fernando queiroz escreveu:se sair por timeout a próxima linha de comandos não será executada
É que a coisa não é o que parece.
Sair por timeout significa que o programa desistiu de esperar, mas não significa que encerrou o comando.
Lá no servidor, ele continua trabalhando no comando.
E com certeza isso é problema, significa que o comando tá demorado, e as tarefas vão se acumulando no servidor.

Problema com ADO

Enviado: 27 Mai 2021 10:36
por Fernando queiroz
JoséQuintas escreveu:
É que a coisa não é o que parece.
Sair por timeout significa que o programa desistiu de esperar, mas não significa que encerrou o comando.
Lá no servidor, ele continua trabalhando no comando.
E com certeza isso é problema, significa que o comando tá demorado, e as tarefas vão se acumulando no servidor.
o pior é que ele continuou fazendo no servidor e não encerrou a rotina na estação, causando problemas pois continuou na tela em vez de fecha-la, já que para sair teria que fechar novamente causando uma repetição da rotina, caso serio esse

Problema com ADO

Enviado: 27 Mai 2021 11:02
por JoséQuintas
Fernando queiroz escreveu:o pior é que ele continuou fazendo no servidor e não encerrou a rotina na estação, causando problemas pois continuou na tela em vez de fecha-la, já que para sair teria que fechar novamente causando uma repetição da rotina, caso serio esse
A execução de SQL NÃO pode ser demorada, salvo exceções.
Comandos usados o tempo todo, tem que ser rápidos.
Pra SQL, dá pra considerar que 2 segundos pode ser demorado, ou até uma eternidade.
Pelo jeito você está considerando que demorar é normal.

Tome como exemplo a pesquisa do google.
Quantos milhões de registros você imagina que o google use?
E o retorno é sempre rápido.
Não é o tamanho do banco de dados que vai definir se pode ou não demorar.

Problema com ADO

Enviado: 27 Mai 2021 12:39
por alxsts
Olá!
alxsts escreveu:O código abaixo mostra como aguardar a execução de um processo mais longo. Talvez te interesse:
Neste mesmo tópico, alguns posts atrás, mostrei como aguardar a execução de um comando SQL sendo executado pela conexão ADO. Talvez ajude...

Problema com ADO

Enviado: 27 Mai 2021 15:34
por Fernando queiroz
alxsts escreveu:Olá!
alxsts escreveu:O código abaixo mostra como aguardar a execução de um processo mais longo. Talvez te interesse:
Neste mesmo tópico, alguns posts atrás, mostrei como aguardar a execução de um comando SQL sendo executado pela conexão ADO. Talvez ajude...
estou usando assim:

cnConnection:CursorLocation := 3
cnConnection:CommandTimeOut := 600 // seconds
cnConnection:ConnectionTimeOut := 600 // seconds

acho que não esta resolvendo, pois em determinados horários (11:30 as 15:00) dona internet não chega a 0.5Kb

Problema com ADO

Enviado: 27 Mai 2021 19:49
por alxsts
Olá!

Me refiro especificamente a este trecho:

Código: Selecionar todos

      oCn := win_OleCreateObject("ADODB.Connection")

      oCn:ConnectionString := cCnString
      oCn:CursorLocation := adUseClient
      oCn:Mode := adModeReadWrite

      oCn:open()
      
      oRs := oCn:Execute("spContador", ,adAsyncExecute)

      // The State property can have a combination of values. 
      // If a statement is executing, this property will have a 
      // combined value of adStateOpen and adStateExecuting.

      While oCn:State == adStateOpen + adStateExecuting   
         hb_idleSleep(3) 
      Enddo

      IF oRs != NIL .And. oRs:state = adStateOpen
         oTbr := TBrowse():new( 02, 3, MaxRow() - 3, MaxCol() - 3 )
...
Note que:
- o método execute da conexão é invocado de forma assíncrona (adAsyncExecute)
- o Do...While...Enddo: enquanto a execução não termina, aguarda 3 segundos.

Problema com ADO

Enviado: 28 Mai 2021 09:22
por JoséQuintas
Mas timeout de 600 segundos são 10 minutos.
10 minutos de espera é uma eternidade pra MySQL.
Se ultrapassa esse tempo limite... é porque a coisa está muito feia.
A internet estar a 0.5kb pode causar demora no retorno de informações, mas não na execução de comandos.
10 minutos de servidor é muito, vai estar afetando todos os usuários e até o próprio servidor.

Problema com ADO

Enviado: 28 Mai 2021 14:04
por Fernando queiroz
JoséQuintas escreveu:Mas timeout de 600 segundos são 10 minutos.
10 minutos de espera é uma eternidade pra MySQL.
Se ultrapassa esse tempo limite... é porque a coisa está muito feia.
A internet estar a 0.5kb pode causar demora no retorno de informações, mas não na execução de comandos.
10 minutos de servidor é muito, vai estar afetando todos os usuários e até o próprio servidor.
ele executou no servidor bem rápido tanto que o usuario que estava na filial ligou avisando que ja estava no caixa a transação, mas na matriz a rotina ainda nao tinha encerrado fechando a tela, quando o app voltou a responder o comando de fechar a tela não foi executado, ficando dentro da rotina, causando o problema