Error con ToleAuto en Harbour

Error con ToleAuto en Harbour

Postby Salvador » Mon Aug 23, 2010 11:07 am

Una aplicación en Harbour que hace frecuentes updates a una BD de SQL me genera el siguiente error de manera aleatoria:

Code: Select all  Expand view
-------------------- Internal Error Handling Information  ---------------------

Subsystem Call ....: WINOLE
System Code .......: 1007
Default Status ....: .F.
Description .......: Argument error
Operation .........: UPDATE
Arguments .........:
Involved File .....:
Dos Error Code ....: -2147352567 (FFFFFFFF80020009)

 Trace Through:
----------------
TOLEAUTO:UPDATE      :Line:       0 in Module:


Conoce alguien el motivo de este error ?.

Gracias de antemano.
Saludos
Salvador
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Error con ToleAuto en Harbour

Postby Daniel Garcia-Gil » Mon Aug 23, 2010 11:28 am

Salvador

Coloca la porcion de codigo que te genera el error, gracias
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Error con ToleAuto en Harbour

Postby Salvador » Mon Aug 23, 2010 1:00 pm

Se genera el error de manera aleatoria, aveces después de grabar hasta 7000 registros.
Se conectan hasta 200 clientes simultáneamente, cada cliente es atendido en un thread diferente.

Code: Select all  Expand view
///////////////////////////////////////////////////////////////////////////////////////////////
// Almacena en la tabla vehiculos la ultima posición si es posterior
//
METHOD InsertPos( cFecha, cHora, cId, cImei, cLatDec, cLonDec, cKmHora, cFix, lAlarma, lStop, DO1, DO2 ) CLASS TServer

if ::oRs:RecordCount() >0
    if cId == cImei
        ::oRs:Find("iduser = '"+cId+"'"  )
        else //
            ::oRs:Find("imei = '"+cImei+"'"  )
    endif      
endif          

if (!::oRs:Eof() .and. !::oRs:Bof() )

  if( dTos( cTod( Left( cFecha, 8 ) ) ) + cHora ) >;
    ( dTos( ::oRs:Fields("fecha"):Value )+;
     ::oRs:Fields("hora"):Value )    

     ::oRs:Fields("fecha"):Value         := cFecha
     ::oRs:Fields("hora"):Value          := cHora
     ::oRs:Fields("velocidad"):Value     := cKmHora
     ::oRs:Fields("stop"):Value          := lStop
     ::oRs:Fields("latitud"):Value       := cLatDec
     ::oRs:Fields("longitud"):Value      := cLonDec
     ::oRs:Fields("fix"):Value           := cFix
     ::oRs:Fields("alarma"):Value        := lAlarma
     ::oRs:Fields("DO1"):Value          := DO1
     ::oRs:Fields("DO2"):Value          := DO2
     ::oRs:Update()
  endif   
endif
return nil
 


El recordset se abre desde aqui:
Code: Select all  Expand view

METHOD oPenRecordSet() CLASS TServer

// abrimos los recordsets antes de procesar los paquetes de datos
// recordset de vehiculos
::oRs:=tOleAuto():New("ADODB.RecordSet")
::oRs:CursorLocation   := adUseClient
::oRs:CursorType       := adOpenDynamic
::oRs:LockType         := adLockOptimistic
::oRs:ActiveConnection := ::oApp:oCnnLocator
::oRs:Source           := "SELECT * FROM VEHICULOS ORDER BY iduser"
::oRs:Open()
return nil
 


Daniel gracias por tu interés.
Saludos
Salvador
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Error con ToleAuto en Harbour

Postby Daniel Garcia-Gil » Mon Aug 23, 2010 1:14 pm

puede que el problema venga de un valor erroneo (un valor nil, fecha en blanco, etc ) que quieras asignar a uno de los campos
has un logfile con los datos antes de asignarlos y despues verifica los valores al momento de la caida

::oRs:Fields("fecha"):Value := cFecha
::oRs:Fields("hora"):Value := cHora
::oRs:Fields("velocidad"):Value := cKmHora
::oRs:Fields("stop"):Value := lStop
::oRs:Fields("latitud"):Value := cLatDec
::oRs:Fields("longitud"):Value := cLonDec
::oRs:Fields("fix"):Value := cFix
::oRs:Fields("alarma"):Value := lAlarma
::oRs:Fields("DO1"):Value := DO1
::oRs:Fields("DO2"):Value := DO2


ADO es bastante estricto y algunas veces hasta dificil de depurar (mi opinion personal)
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Error con ToleAuto en Harbour

Postby Salvador » Wed Aug 25, 2010 5:21 pm

Leyendo los errores de Ado me dice:
Code: Select all  Expand view

Description: No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó.
Native error:         32
Error number:          -2147217864
Error source: Microsoft Cursor Engine
 


Parece ser que varios clientes modifican el mismo registro al mismo tiempo, de momento así:
Code: Select all  Expand view

::oRs:ReSync( adAffectCurrent,adResyncAllValues )
 
::oRs:Fields("fecha"):Value         := cFecha
::oRs:Fields("hora"):Value          := cHora
::oRs:Fields("velocidad"):Value     := cKmHora
::oRs:Fields("stop"):Value          := lStop
::oRs:Fields("latitud"):Value       := cLatDec
::oRs:Fields("longitud"):Value      := cLonDec
::oRs:Fields("fix"):Value           := cFix
::oRs:Fields("alarma"):Value        := lAlarma
::oRs:Fields("DO1"):Value           := DO1
::oRs:Fields("DO2"):Value           := DO2
::oRs:Update()
 


Parece funcionar siempre que la concurrencia no sea excesiva
Saludos
Salvador
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España

Re: Error con ToleAuto en Harbour

Postby Salvador » Thu Aug 26, 2010 7:18 am

"Mi gozo en un pozo".
Sigue dando el mismo error aunque solo hay dos clientes accediendo al mismo registro.

Code: Select all  Expand view
::oRs:ReSync( adAffectCurrent,adResyncAllValues )


Parece no funcionar o no está utilizada correctamente.
Saludos
Salvador
Salvador
 
Posts: 144
Joined: Sun Dec 18, 2005 3:18 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 85 guests