PDA

Ver la Versión Completa : Firebird 1.5 contra Interbase 5


japons
16-01-2007, 13:10:48
Hola a todos:

Disculpad ante todos mi ignorancia. Tengo una aplicación en delphi 6, hace mucho tiempo, corriendo sobre Interbase 5. He pasado a Fierbird 1.5 y todo va de maravilla, hasta este instante, en el que acabo de detectar que se produce en ciertas circunstancias un deadlock, que con Interbase no se producía. ¿Alguien puede darme una pista de porqué?


Gracias de antemano

fdelamo
16-01-2007, 13:30:25
Hola japons,

no se si irán por ahí los tiros, pero creo que firebird funciona así:

- haces un select de algo en una transaccion
- haces un update de algo (en otra transaccion)
- y haces un select de lo modificado pero con la primera transaccion (sin hacer commit ni rollback), creo que aquí peta, ya que esta transacción comenzó cuando se hizo el primer select, y el update se ha hecho después.

Mira a ver si puede ir por ahí el tema

ArdiIIa
16-01-2007, 14:09:32
Mas o menos, el deadlock se produce cuando al modificado un registro, y este está pendiente de recibir el COMMIT. Cuando tratas de modificar nuevamente la tabla afectada y se da esa circunstancia, es cuando se produce el error. Para controlarlo, asegúrate que la transacción que modificó inicialmente la tabla, haga ese esperado commit.


Ya puestos a cambiar, ¿Por que no has pasado a la versión 2 de Firebird?

japons
16-01-2007, 14:21:31
Mas o menos, el deadlock se produce cuando al modificado un registro, y este está pendiente de recibir el COMMIT. Cuando tratas de modificar nuevamente la tabla afectada y se da esa circunstancia, es cuando se produce el error. Para controlarlo, asegúrate que la transacción que modificó inicialmente la tabla, haga ese esperado commit.


Ya puestos a cambiar, ¿Por que no has pasado a la versión 2 de Firebird?


Ante todo, daros las gracias por vuestras prontas repsuestas. En cuanto a porqué no cambio a Firebird 2, basicamente porque el software lleva informes Fast report de una versión muy antigua, que en Firebird 1.5 funcionan, y en firebird 2 no, (ya lo he probado).

En cuanto al deadlock, mi problema viene porque la actualizacion de la tabla la hace un store procedure, como controlo esto?


Gracias

ArdiIIa
16-01-2007, 14:45:22
Ante todo, daros las gracias por vuestras prontas repsuestas. En cuanto a porqué no cambio a Firebird 2, basicamente porque el software lleva informes Fast report de una versión muy antigua, que en Firebird 1.5 funcionan, y en firebird 2 no, (ya lo he probado).

En cuanto al deadlock, mi problema viene porque la actualizacion de la tabla la hace un store procedure, como controlo esto?
Gracias

Curioso los de FastReport.

Referente al tu Store Procedure deberías hacer algo como esto:

with DataModule.IBStoredProcXXX DO
Begin
ParamByName('xxx1').AsInteger := xxx
ParamByName('xxx2').AsInteger := xxx
ExecProc;
Transaction.Commit;
End;