Caballeros:

Tengo una tabla libre MiTabla.dbf, con una PK sobre el campo MiTabla.Id
(Integer)



Tambien tengo un cursor MiCursor, leído con un Select obre MiTabla, donde
modifico algunos campos.



Hasta ahora actualizaba MiTabla con el Procedure Grabar1(), pero tenía
problemas de performance.

Hice pruebas con el Coverage, y el Procedure Grabar2() resultó ser
infinitamente más veloz.



La preguntaes: está mal el comando Update – SQL, o siempre es preferible el
Seek() + Gather



La tabla que se actualiza tiene 12500 registros y pesa 4.0Mb.

El cursor que actualiza la tabla tiene 10 registros

Estoy usando VFP9 SP2





Procedure Grabar1()

     Update MiTabla Set ;

         MiTabla.Campo1 = MiCursor.Campo1,;

         MiTabla.Campo2 = MiCursor.Campo2,;

         MiTabla.Campo3 = MiCursor.Campo3,;

         MiTabla.Campo4 = MiCursor.Campo4 ;

         From MiCursor ;

         Where MiTabla.Id = MiCursor.Id





     * Tiempo de Proceso: Avg 0.636852



Endproc







Procedure Grabar2()



     Select MiCursor

     Locate



     Scan



         Scatter Fields ;

              Campo1, Campo2, Campo3, Campo4 Name loReg



         Select MiTabla



         If Seek( MiCursor.Id, "MiTabla", "Id" )



              Rlock()

              Gather Name loReg

              Unlock

         Endif



         Select MiCursor



     EndScan



     * Tiempo de Proceso: Avg 0.078448



Endproc



Muchas gracias





ricardo aidelman

( socio nº 1545 )




-----
Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 2015.0.5863 / Base de datos de virus: 4321/9433 - Fecha de la versión: 
01/04/2015

Responder a