* 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; ClearCalcFields(FCalcBuffer);
FState := dsCalcFields;
try if not IsUniDirectional then
ClearCalcFields(FCalcBuffer); for i := 0 to FFieldList.Count - 1 do
if not IsUniDirectional then if FFieldList[i].FieldKind = fkLookup then
for i := 0 to FFieldList.Count - 1 do FFieldList[i].CalcLookupValue;
if FFieldList[i].FieldKind = fkLookup then
FFieldList[i].CalcLookupValue;
finally
DoOnCalcFields;
FState := OldState;
end;
end; end;
DoOnCalcFields;
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
CalculateFields(Buffer); begin
OldState := FState;
FState := dsCalcFields;
try
CalculateFields(Buffer);
finally
FState := OldState;
end;
end;
end; end;
function TDataSet.GetCanModify: Boolean; function TDataSet.GetCanModify: Boolean;