Cita:
|
Empezado por maeyanes
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...
|
Gracias maeyanes, pero uso algo muy similar al tuyo con la diferencia que uso el While..do, me imagino que después del Post que tienes viene un Commit, pues se te puede presentar que al pasar el Post en ese mismo instante se apague la PC ó marque los errores tradicionales de Windows, vas a dejar bloqueado el registro hasta que le des un ShutDown a Firebird, espero nunca te suceda esto, pero en el mundo de la informatica todo puede esperarse... Gracias por tu consejo.