Si estas conectado via BDE (que no lo mencionas), y el campo CODIGO es parte de la llave primaria, no hay forma de hacer lo que pedis... pues el BDE se basa en la llave primaria para identificar al registro.
El comportamiento es que al hacer un POST, el BDE, luego de recibir de nuevo el control, relee el registro de la base de datos (digamos, genera un Select * from tabla where llaveprimaria = llaveprimaria antes de actualizar).
De alli, que si el valor de esta cambia durante el post (mediante triggers), el BDE pierde el registro y te situa al inicio de la tabla.
Lo que si podes hacer para evitar esto, es llamar vos directamente al generador, digamos en el evento BeforePost de la tabla, y asignarle el valor dentro del mismo BDE.
Yo lo hago normalmente llamando a un stored procedure, que obtiene el valor del generador y lo devuelve en un parámetro.
y en el evento BeforePost hago algo cómo:
Código:
Procedure Table1BeforePost(aDataSet : TDataSet);
Begin
if (Table1.State = dsInsert) and (Table1CODIGO.IsNull) Then
Begin
spObtieneCodigoTable1.ExecProc;
Table1CODIGO.AsInteger := spObtieneCodigoTable1.ParamByName('aID').AsInteger;
end;
end;
la idea es esa...
Hasta luego