bueno después de investigar y leer en varios artículos, lo he resuelto de la siguiente manera:
1. en lugar de dejar el campo Id (AutoIncr) sin valor, he dispuesto ponerle un valor único a cada registro usando para ello un número entero negativo garantizando que no se me confunda con algún otro número por ahí
Código Delphi
[-]
K := -1;
....
begin
ClientDataSet1.FieldByName('Id').AsInteger := K;
ClientDataSet1.Post;
Dec(K);
end;
2. el evento BeforeUpdateRecord del TDataSetProvider se ejecuta con la instrucción ApplyUpdates antes de hacer la actualización física en el servidor, allí se implementa un mecanismo para conocer cuál sería el próximo número del Id y se actualiza usando la propiedad NewValue, para que llegue al servidor con el número que corresponde
Código Delphi
[-]
procedure TDM.Provider1BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
var
NroRgtro: Integer;
begin
if UpdateKind = TUpdateKind.ukInsert then
begin
spIdMAX.ExecProc; NroRgtro := spIdMAX.Params.ParamByName('IdMAX').AsInteger;
DeltaDS.FieldByName('Id').NewValue := NroRgtro + 1;
end;
end;