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