Firebird usa un modelo de bloqueos "optimista", por lo que un registro no será bloqueado con el simple hecho de comenzar su edición.
Podes simular un entorno de bloqueos "pesimista" haciendo lo que se conoce como una
actualización en falso sobre el registro que te interesa, de manera que este sea efectivamente bloqueado.
Podrias, en el evento AfterEdit, por ejemplo, lanzar el siguiente query:
Código SQL
[-]
Update Tabla
set campo = campo
where llave = ValorLlave;
como ves, en realidad nada se cambiará en el registro (de alli el nombre de actualización en falso), sin embargo sobre este será puesto un bloqueo que se liberará con el próximo commit/rollback.
Si dejas las transacciones como nowait, te saltará una excepción inmediatamente trates de hacer esto, que ya será cosa de "atrapar" para realizar las acciones pertinentes, por ejemplo, no permitir la edición del registro.
algo como:
Código Delphi
[-]
Procedure TDataModule1.TablaAfterUpdate(Parametros...);
Begin
try
LanzarActualizaciónEnFalso;
except
Tabla.Cancel; raise; end;
end;
Desde mi punto de vista, con esto estas echando a perder una de las grandes ventajas de firebird (y de muchas de las bases de datos relacionales serias)... asi que te aconsejo pensarla otras dos veces y ver si mejor cambias tu forma de pensar para aprovechar esta gran característica.
Hasta luego.
