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
///////////////////////////////////////////////////////////////////////////////////////////////
// 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
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.