私のアプリケーションでも同じ問題がありました。その解決策は少しトリッキーです。まず、IDENTITY_INSERT を ON に設定する必要があります。
procedure TdmUnit1.Identity(Table: string; OnOff: boolean);
var s: string;
begin
if OnOff = true then
s := 'ON'
else
s := 'OFF';
s := 'SET IDENTITY_INSERT ' + '[dbo].[' + Table + '] ' + s;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(s);
SQLQuery1.ExecSQL;
end;
次に、テーブル内で最高のインデックスを探す必要があります。OnNewRecord-Event で実現できること:
procedure TdmUnit1.ClientDataSet1NewRecord(DataSet: TDataSet);
var
s: string;
i: integer;
begin
s := 'SELECT IDENT_CURRENT(''AnyTable'')';
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(s);
SQLQuery1.ExecSQL;
SQLQuery1.Active := true;
i := SQLQuery1.Fields[0].AsInteger;
ClientDataSet1.FieldByName('DB_IDX').AsInteger := i+1;
SQLQuery1.Active := false;
end;
ApplyUpdates(0) の後、IDENTITY_INSERT を OFF にする必要があります。