Ver Mensaje Individual
  #1  
Antiguo 06-01-2009
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Reputación: 18
totote Va por buen camino
Unhappy Trasacciones Firebird dbExpress

Hola gente del foro, en los últimos días me ha surgido un problema con las transacciones y no se como solucionarlo, actualmente utilizo Delphi 2007 con componentes de conexion dbExpress y el motor de base de datos Firebird 2.0.

La situación es la siguiente, tengo dos usuarios en la base de datos ademñas de SYSDBA,Usuario1 y Usuario2, en un modelo de facturación, tengo una tabla donde guardo el número para la siguiente factura, en la situación ideal, inicio una transacción, tomo el valor de la factura de la tabla numero_comprobante, actualizo ese registro al siguiente número, creo una nueva factura y le asigno el número obtenido, al finalizar hago un commit para guardar los cambios, en caso de que se genere un error se hace un rollback para volver todo a su estado anterior. Esto funciona en el caso de que un usuario esté accediendo a estas tablas, pero el problema surge cuando se da esta situación, el Usuario1 inicia la transacción, obtiene el número de la factura y actualiza el registro al siguiente número, y mientras se completa la factura, en ese mismo instante el Usuario2, inicia otra transacción (estamos hablando de que cada usuario se encuentra en una PC diferente, pero conectados a la misma base de datos), obtiene el número de la factura y cuando actualiza el registro con el siguiente número este, por decirlo mal y pronto, se queda colgado, y si el Usuario1 cancela su factura el Usuario2 continua sin ningún problema, pero si el Usuario1 guarda los cambios, al Usuario2 el sistema le genera un error y no lo deja continuar.
Mi duda es, si se puede detectar una transacción iniciada por otro usuario, para prevenir que se "cuelgue" el sistema y por ende no me genere el error, cosa de que si lo detecto, poder mostrar un mensaje diciendo "En este momento no se puede realizar esta tarea, intentelo más tarde" o algo parecido.

Saludos
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS
Responder Con Cita