Todo se soluciona con transacciones y calculando ese valor en el momento preciso.
Yo calculo el valor justo antes de grabar.
En una tabla normal sería OnBeforePost.
Para esto abro una transacción aparte y calculo el contador. (utilizo un procedimiento almacenado que además verifica si se ha borrado un número y lo reutiliza)
Código:
TablaOnBeforePost
begin
Abro TransacciónContador
Calculo Contador
TablaCONTADO.AsInteger := Contador;
end;
TablaOnAfterPost
begin
Cierro TransacciónContador
end;
TablaOnPostError
begin
Rollback de TransacciónContador;
end;