La mejor opción:
En los componentes de base de datos seguramente tienes un evento BeforePost. Es este evento deberías poner tu código de validación o buscar el número que le asignarás.
Por ejemplo, en mis programas hago algo parecido a esto:
Código Delphi
[-]
OnBeforePost(DataSet)
begin
if (DataSet.State = dsInsert) then
begin
DataSet.FieldByName('CODIGO').AsInteger := BuscaMaxCodigo + 1;
end;
end;
Un caso real de clientes en mi aplicación:
Código Delphi
[-]
procedure TDMClientes.QMClientesNewRecord(DataSet: TDataSet);
var
...
begin
QMClientesEMPRESA.AsInteger := Entorno.Empresa;
QMClientesEJERCICIO.AsInteger := Entorno.Ejercicio;
QMClientesCANAL.AsInteger := Entorno.Canal;
QMClientesCLIENTE.AsInteger := 0;
...
procedure TDMClientes.QMClientesBeforePost(DataSet: TDataSet);
var
...
begin
if ((DataSet.State = dsInsert) and (QMClientesCLIENTE.AsInteger = 0)) then
QMClientesCLIENTE.AsInteger := DMMain.Contador_E('CLI');
...