* Patch from Henrique Werlang to fix setting correct state when modifying data

This commit is contained in:
michael 2021-06-11 14:10:19 +00:00
parent 5fef7a40d0
commit 5a942fb610

View File

@ -2464,24 +2464,20 @@ end;
procedure TDataSet.CalculateFields(var Buffer: TDataRecord); procedure TDataSet.CalculateFields(var Buffer: TDataRecord);
var var
i: Integer; i: Integer;
OldState: TDatasetState;
begin begin
FCalcBuffer := Buffer; FCalcBuffer := Buffer;
if FState <> dsInternalCalc then if FState <> dsInternalCalc then
begin begin
OldState := FState;
FState := dsCalcFields;
try
ClearCalcFields(FCalcBuffer); ClearCalcFields(FCalcBuffer);
if not IsUniDirectional then if not IsUniDirectional then
for i := 0 to FFieldList.Count - 1 do for i := 0 to FFieldList.Count - 1 do
if FFieldList[i].FieldKind = fkLookup then if FFieldList[i].FieldKind = fkLookup then
FFieldList[i].CalcLookupValue; FFieldList[i].CalcLookupValue;
finally end;
DoOnCalcFields; DoOnCalcFields;
FState := OldState;
end;
end;
end; end;
procedure TDataSet.CheckActive; procedure TDataSet.CheckActive;
@ -3142,10 +3138,20 @@ begin
end; end;
procedure TDataSet.GetCalcFields(var Buffer: TDataRecord); procedure TDataSet.GetCalcFields(var Buffer: TDataRecord);
var
i: Integer;
OldState: TDatasetState;
begin begin
if (FCalcFieldsCount > 0) or FInternalCalcFields then if (FCalcFieldsCount > 0) or FInternalCalcFields then
begin
OldState := FState;
FState := dsCalcFields;
try
CalculateFields(Buffer); CalculateFields(Buffer);
finally
FState := OldState;
end;
end;
end; end;
function TDataSet.GetCanModify: Boolean; function TDataSet.GetCanModify: Boolean;