Ver Mensaje Individual
  #8  
Antiguo 02-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Reputación: 26
maeyanes Va por buen camino
Yo estoy trabajando en un sistema de inventarios, donde los números consecutivos los genera la aplicación, basándome en una tabla de control. Cuando más de un cliente trata de guardar un registro nuevo, primero verifico si el número que voy a usar no está ya usado, si es así, obtengo un número nuevo y lo uso. Todo esto con un Trigger Before Insert de la tabla.

Ahora, desde la aplicación, al momento de guardar el registro lo hago mediante un repeat..until de esta forma:

Código Delphi [-]
repeat
  Stored := True;
  try
    DataSet.Post;
  except
    on E: EIBInterBaseError do
    begin
      // Si existe DeadLock, cambio a False Stored para repetir la inserción...
      Stored := not E.SQLCode = -901; 
      if Stored then // Si Stored sigue siendo verdadero, la excepción fue otra y la relanzo...
        raise
    end
  end
until
  Stored;

El código no es exactamente el mismo, pero con esto resolví el problema de los DeadLock...

Espero te sirva...


Saludos...
Responder Con Cita