我對我的應用程序有同樣的問題。解決這個問題有點棘手。首先,您必須將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-事件實現:
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。
您正在使用哪個數據集組件? –
我正在使用DBX組件。 – blake
嘿布雷克,你應該考慮[取消這個問題,如果你可以](http://stackoverflow.com/questions/13548037/javascript-return-exits-block-not-function)。我認爲這很有趣。 – jmort253