내 응용 프로그램과 동일한 문제가있었습니다. 그 해결책은 조금 까다 롭습니다. 먼저 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가 OFF 전환해야 후.
어떤 데이터 세트 구성 요소를 사용하고 있습니까? –
DBX 구성 요소를 사용하고 있습니다. – blake
안녕하세요 블레이크, [가능한 경우이 질문의 삭제 취소]를 고려해야합니다 (http://stackoverflow.com/questions/13548037/javascript-return-exits-block-not-function). 나는 그것이 재미 있다고 생각했다. – jmort253