FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error con ToleAuto en Harbour
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Error con ToleAuto en Harbour
Posted: 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 (fw): Select all Collapse
-------------------- 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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Error con ToleAuto en Harbour
Posted: Mon Aug 23, 2010 11:28 AM

Salvador

Coloca la porcion de codigo que te genera el error, gracias

Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Error con ToleAuto en Harbour
Posted: Mon Aug 23, 2010 01: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 (fw): Select all Collapse
///////////////////////////////////////////////////////////////////////////////////////////////
// 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 (fw): Select all Collapse
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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Error con ToleAuto en Harbour
Posted: Mon Aug 23, 2010 01: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)
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Error con ToleAuto en Harbour
Posted: Wed Aug 25, 2010 05:21 PM
Leyendo los errores de Ado me dice:
Code (fw): Select all Collapse
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 (fw): Select all Collapse
::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
Posts: 144
Joined: Sun Dec 18, 2005 03:18 PM
Re: Error con ToleAuto en Harbour
Posted: Thu Aug 26, 2010 07:18 AM
"Mi gozo en un pozo".
Sigue dando el mismo error aunque solo hay dos clientes accediendo al mismo registro.

Code (fw): Select all Collapse
::oRs:ReSync( adAffectCurrent,adResyncAllValues )


Parece no funcionar o no est谩 utilizada correctamente.
Saludos

Salvador

Continue the discussion