Página 1 de 1

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 19 Out 2016 22:41
por Ruben Dario
Saludos al forum
cuando ejecuto una sentencia SQL algo compleja y me da el error

Algun usuario le ha pasado esto.
Cuando ejecuto un Query, me da este error
Query Execution was interrumped , Maximum statement Execution time Exceeded 0x80004005

Uso Windows 10 64 bits
MySQL Server 5.7 64 bits
Connector ODBC 5.3 32 bits


Si doy la misma sentencia desde la consola de mysql funciona se demora 2 min 37.56 sec
Si uno Navicat Funciona.

Pero desde el programa ejecutable usando ADO no funciona genera el error

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 01:27
por JoséQuintas
timeout?

Código: Selecionar todos

   cnConnection:CommandTimeOut    := 200 // seconds
   cnConnection:ConnectionTimeOut := 200 // seconds

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 14:37
por Ruben Dario
Gracias.
Pero sigue el mismo problema.

asi hago la conexion

Código: Selecionar todos

              oApp:oServer        := TOLEAUTO():New("ADODB.connection") 
              oApp:oADOStream     := TOLEAUTO():New("ADODB.Stream") 
              oApp:oADOIndex      := TOLEAUTO():New("ADOX.Index") 
              oApp:oADOCatalog    := TOLEAUTO():New("ADOX.Catalog") 
              oApp:oServer:CommandTimeOut    := 200  //200  15 
              oApp:oServer:ConnectionTimeOut := 200   //30   10   
              oApp:oServer:CursorLocation    := adUseClient 
              oApp:oServer:Mode              := adModeShareDenyNone 
              oApp:oServer:Open( oApp:StrConnection ) 

              oApp:oADOoSql := TOleAuto():New("ADODB.Command")
              oApp:oADOoSql:CommandType := adCmdText
              oApp:oADOoSql:ActiveConnection := oApp:oServer


Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 15:40
por JoséQuintas
Uso de um modo mais simples, no Harbour, não sei se faz diferença nisso, mas não tenho query tão demorada.

Código: Selecionar todos

cnConnection := win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := "dfdfdfdfdfdfd"
cnConnection:CursorLocation := AD_USE_CLIENT
cnConnection:CommandTimeOut := 600
cnConnection:ConnectionTimeOut := 600

rs := cnConnection:Execute( "SELECT COUNT(*) AS QTD FROM CLIENTES" )

? oRs:Fields( "QTD" ):Value
rs:Close()
cnConnection:Close()

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 18:40
por Ruben Dario
Gracias, pero no funciona, dice que la conexion no esta activa, parece que falta algo.

en realidad nunca he manejado win_OleCreateObject( "ADODB.Connection" ) siempre he manejado TOLEAUTO():New("ADODB.connection") y TOleAuto():New( "ADODB.Recordset" )
que diferencia hay entre manejar win_OleCreateObject y TOLEAUTO():New("ADODB.connection") en realidad no veo o documentacion.

gracias por tu ayuda pero me interesa el tema segun dices o te entiendo es mas rapido win_OleCreateObject que OLEAUTO():

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 19:14
por JoséQuintas
Cometi um erro, esqueci de abrir a conexão.

Código: Selecionar todos

cnConnection:Open()

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 19:29
por JoséQuintas
Não sei se é mais rápido, apenas sempre usei assim.

Mas não dá pra otimizar essa query?
Talvez o limite de tempo de uma query seja diferente quando executada em console.

Verifique se há alguma configuração de limite de tempo.
Verifique se foi configurado um cache no servidor MySQL muito pequeno, o que causaria lentidão.
A configuração é diferente entre Innodb e MyISAM.

Quantos milhões de registros estão sendo usados pra atender essa query?

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 22:28
por Ruben Dario
Gracias.
Si funciona con tu codigo.
El que tenia funciona pero cuando son Querin muy grandes genera el error de tiempor mira el codigo qu me genera el error.

Código: Selecionar todos

              oApp:oServer        := TOLEAUTO():New("ADODB.connection")
               
              oApp:oADOStream     := TOLEAUTO():New("ADODB.Stream") 
              oApp:oADOIndex      := TOLEAUTO():New("ADOX.Index") 
              oApp:oADOCatalog    := TOLEAUTO():New("ADOX.Catalog") 
              
              oApp:oServer:CommandTimeOut    := 200  //200  15   300
              oApp:oServer:ConnectionTimeOut := 30   //30   10  300 
              oApp:oServer:CursorLocation    := adUseClient 
              oApp:oServer:Mode              := adModeShareDenyNone 
              oApp:oServer:Open( oApp:StrConnection ) 

              oApp:oADOoSql := TOleAuto():New("ADODB.Command")
              oApp:oADOoSql:CommandType := adCmdText
              oApp:oADOoSql:ActiveConnection := oApp:oServer   
                                        
            cQuery := "SELECT  * ...." " 

              oApp:oServer:CommandText:=cQuery
              base :=  oApp:oServer:Execute()  //?oDatos:RecordCount()*/
            	? alert(loco:Fields( "nombre" ):Value  )
              base:Close()

Uso ADODB.Command para generar lo Querin este es el del problema.

Gracias, voy a Implementar tu ejemplo, no lo conocia. Gracias.

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 23:01
por JoséQuintas
E com win_OleCreateObject? mesmo erro?
Pelo menos tira a dúvida se o problema está em TOLEAUTO(), ou no uso de ADODB.Command

Código: Selecionar todos

oApp:oServer    := win_OleCreateObject( "ADODB.connection" )
oApp:oADOStream  := win_OleCreateObject( "ADODB.Stream" ) 
oApp:oADOIndex   := win_OleCreateObject( "ADOX.Index" ) 
oApp:oADOCatalog  := win_OleCreateObject( "ADOX.Catalog" ) 
oApp:oServer:CommandTimeOut  := 200 //200 15 300
oApp:oServer:ConnectionTimeOut := 30 //30 10 300 
oApp:oServer:CursorLocation  := adUseClient 
oApp:oServer:Mode       := adModeShareDenyNone 
oApp:oServer:Open( oApp:StrConnection ) 

oApp:oADOoSql := win_OleCreateObject( "ADODB.Command" )
oApp:oADOoSql:CommandType := adCmdText
oApp:oADOoSql:ActiveConnection := oApp:oServer 
                    
cQuery := "SELECT * ...." " 

oApp:oServer:CommandText:=cQuery
base := oApp:oServer:Execute() //?oDatos:RecordCount()*/
? alert( loco:Fields( "nombre" ):Value )
base:Close()

Mysql-Maximum statement Execution time Exceeded 0x80004005

Enviado: 20 Out 2016 23:51
por Ruben Dario
Gracias
Si segun veo tu ejemplo no es necesario usar ADODB.Command

Pero Tampoco usas el ADODB.Recordset