Kinobi hizo en su momento un pdf llamado "transacciones en Interbase y Firebird, ignoro si está en este foro, aunque en
www.firebird.com.mx lo puedes encontrar. Te recomiendo su detenida lectura.
Allí se habla del nivel de aislamiento de una transacción (isolation level), creo que en lugar de usar read commited (que será la que usas actualmente) deberías usar snapshot. Esto se indica en los parámetros del objeto Transaction que uses, dicho de otra forma, en la propiedad Transaction.Params
Cita:
SNAPSHOT: conocido también por lectura repetible (repeteable read). Ofrece
un nivel de aislamiento alto, de tal forma que la transacción no puede
ver los cambios provocados por otras transacciones; es decir, mantiene una
foto fija del estado de la base de datos en el momento que se inició la transacción
|
A groso modo:
- Empezamos una transacción nueva
- hacemos operaciones con la maestra
- operaciones con la detalle
- buscamos los totales de la detalle (como nuestra transacción en snapshot no puede ver las actualizaciones realizadas por otras transacciones, solo verá los cambios realizados antes de que empezó nuestra transacción).
- mostramos todo en pantalla
- cerramos transacción (commit).
Saludos