Tienes razón Enecuneme.
Ante tanta cosa yo haría esto:
No asignar el valor de la clave en cuestión por medio de un generador si no por medio de una una función desde la aplicación, esta función usaría un query (dependiendo de con que te conectas) aquí un ejemplo con TADOQuery:
Código Delphi
[-]
function ID(Tabla: string; Campo: string): Integer;
begin
with Query do
try
Close;
SQL.Clear ;
SQL.Add('Select max('+ Campo +')as Nuevo from '+ Tabla);
Open ;
if IsEmpty then
Result := 1
else
Result := FieldByName('Nuevo').AsInteger + 1;
finally
Close ;
end;
end;
procedure TablaBeforePost(DataSet: TDataSet);
begin
Tabla.FielByname('Clave').Value := ID('Tabla','Clave');
end;