Page 1 of 1

TDBOdbcDirect()

Posted: Wed Apr 05, 2006 7:38 pm
by VeRCE
A que se debe este mensaje ???
Como evitarlo ???

Some record fields (3) have change since the last retrieve operation.
Update aborted.


Gracias

Posted: Wed Apr 05, 2006 10:28 pm
by jlcapel
Juan Carlos,

La clase tOdbcDirect utiliza la misma técnica que ADO: hace una consulta de acción para verificar si los datos que vas a actualizar son 'consistentes'. En caso que hayan sido modificados por otro terminal mientras tu estabas editando los mismos datos la clase te avisa con el mensaje que citas.

Saludos,
José Luis Capel

Posted: Thu Apr 06, 2006 2:50 pm
by VeRCE
Es decir que cada vez que dos terminales modifiquen los
datos del mismo registro, el último que intente actualizar
los datos obtendrá ese error. Es correcto ???

Posted: Thu Apr 06, 2006 4:54 pm
by jlcapel
Juan Carlos,
Es decir que cada vez que dos terminales modifiquen los
datos del mismo registro, el último que intente actualizar
los datos obtendrá ese error. Es correcto ???
Si... ese es el comportamiento por defecto. Si quieres evitarlo puedes poner la data ::lNoCompare a .T.

No obstante, puedes modificar directamente el método UPDATE y marcar lo siguiente:

Code: Select all

 /*
     if ::RecordHasChanged(@aChanged)
         if aChanged[1] == 0
            ::SQLAlert("Record has been deleted since the last retrieve operation, Update aborted")
         else
            cFields := ""
            Aeval(aChanged, {|v,e| cFields += ltrim(str(v)) + iif( e < len(aChanged),", " ,"" )})
            ::SQLAlert("Some record fields ("+cFields+;
                       ") have change since the last retrieve operation, Update aborted")
         endif
         return .f.
      endif
*/
Saludos,
José Luis Capel

Posted: Thu Apr 06, 2006 7:39 pm
by VeRCE
Que consecuencias tendría si comento esas lineas que
me estás sugiriendo ???