Me pueden colaborar con la siguiente situacion ; les agradezco de antemano
Tengo una aplicacion con tres tablas
1. documentos, (Guarda el nro de la facturas o consecutivos)
2. enc_mov ( encabezados de las facturas)
3. mov ( items de las facturas )
set multilock on
set reprocess to 30 seconds
abro las tablas
aplico el comando siguiente a cada una de las tablas
CURSORSETPROP("Buffering", 3, "DOCUMENTOS")
CURSORSETPROP("Buffering", 3, "enc_mov")
CURSORSETPROP("Buffering", 5, "Mov")
Cuando creo o modifico una nueva factura hago un Begin transaction
y cuando las grabo hago un tableupdate para cada tabla si es exitosa hago un
end transaction , sino un rollback
IF TABLEUPDATE( 1, .t. ,"DOCUMENTOS") AND TABLEUPDATE( 1, .t. ,"MOV") AND
TABLEUPDATE( 1, .t. ,"ENC_MOV")
=MESSAGEBOX("Transaccion Exitosa",64,"TRANSACCION",1)
END TRANSACTION
ELSE
ROLLBACK
TABLEREVERT( .t.,"DOCUMENTOS")
TABLEREVERT( .t.,"MOV")
TABLEREVERT( .t.,"ENC_MOV")
®RROR( aCualError)
FOR j= 1 TO 7
MESSAGEBOX( acualerror(j) )
NEXT
=MESSAGEBOX("Error en la Transaccion",0,"E R R O R TRANSACCION")
ENDIF
al parecer funciona bien , excepto , cuando por coincidencia 2 usuarios
intentan modificar una misma factura exactamente
al mismo tiempo.
El error es "conflicto de actualizacion", si le digo pasar por alto, el
programa continua pero lo que hace es unir las dos actualziaciones
el sistema trabaja los registros en un cursor , luego al actualizar hace un
delete from y luego hace los insert
Como me recomiendan manejar este tipo de situacion?
Gracias
Luis Fernando Bedoya
Leer las respuestas