procedure SaveData; begin with cdsDetail do begin if ((FFormState = fsInsert) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString)) and (DBModule.GetDBRevNumber(Format(SQL_EXISTS, [FTableName, dbFormID.Field.FullName]), VarArrayOf([dbFormID.Field.asString])) > 0) then with cdsMaster do begin Edit; dbFormID.Field.AsString := GetNewFormID; Post; end; DisableControls; try First; while not eof do begin if (FFormState = fsInsert) or (UpdateStatus <> usUnmodified) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString) then begin Edit; FieldByName(dbFormID.Field.FullName).AsString := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString; if Assigned(FindField('Penster')) then FieldByName('Penster').AsString := CurComputerName; if Assigned(FindField('CreateDate')) then FieldByName('CreateDate').asDateTime := DBModule.GetServerDateTime; Post; end; if FieldByName('RecID').AsInteger <> RecNo then begin Edit; FieldByName('RecID').AsInteger := RecNo; Post; end; Next; end; except end; EnableControls; BeforeSave; ApplyUpdates(-1); cdsMaster.Edit; cdsMaster.FieldByName('Penster').AsString := CurComputerName; cdsMaster.FieldByName('CreateDate').AsDateTime := DBModule.GetServerDateTime; cdsMaster.Post; cdsMaster.ApplyUpdates(-1); FFormID := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString; case FFormState of fsInsert:DBModule.WriteLog(Format(STR_ACTION_ADD, [Caption]), dbFormID.Field.AsString); fsEdit:DBModule.WriteLog(Format(STR_ACTION_MODIFY, [Caption]), dbFormID.Field.AsString); end; AfterSave; FFormState := fsBrowse; RefreshData(FFormID); FModifyed := True; end; end; 這是用來保存數據的代碼,出錯提示“Key Violation”停在first那一句上
FormID RecID ....
200800001 1 正常
200800001 2 不能保存提示錯誤 key violation
200800001 3 直接提示錯誤 key violation
begin
with cdsDetail do
begin
if ((FFormState = fsInsert) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString)) and
(DBModule.GetDBRevNumber(Format(SQL_EXISTS, [FTableName, dbFormID.Field.FullName]), VarArrayOf([dbFormID.Field.asString])) > 0) then
with cdsMaster do
begin
Edit;
dbFormID.Field.AsString := GetNewFormID;
Post;
end;
DisableControls;
try
First;
while not eof do
begin
if (FFormState = fsInsert) or (UpdateStatus <> usUnmodified) or (FFormID <> cdsMaster.FieldByName(dbFormID.Field.FullName).AsString) then
begin
Edit;
FieldByName(dbFormID.Field.FullName).AsString := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString;
if Assigned(FindField('Penster')) then FieldByName('Penster').AsString := CurComputerName;
if Assigned(FindField('CreateDate')) then FieldByName('CreateDate').asDateTime := DBModule.GetServerDateTime;
Post;
end;
if FieldByName('RecID').AsInteger <> RecNo then
begin
Edit;
FieldByName('RecID').AsInteger := RecNo;
Post;
end;
Next;
end;
except end;
EnableControls;
BeforeSave;
ApplyUpdates(-1);
cdsMaster.Edit;
cdsMaster.FieldByName('Penster').AsString := CurComputerName;
cdsMaster.FieldByName('CreateDate').AsDateTime := DBModule.GetServerDateTime;
cdsMaster.Post;
cdsMaster.ApplyUpdates(-1);
FFormID := cdsMaster.FieldByName(dbFormID.Field.FullName).AsString;
case FFormState of
fsInsert:DBModule.WriteLog(Format(STR_ACTION_ADD, [Caption]), dbFormID.Field.AsString);
fsEdit:DBModule.WriteLog(Format(STR_ACTION_MODIFY, [Caption]), dbFormID.Field.AsString);
end;
AfterSave;
FFormState := fsBrowse;
RefreshData(FFormID);
FModifyed := True;
end;
end;
這是用來保存數據的代碼,出錯提示“Key Violation”停在first那一句上