From 5a942fb610681f34381e41dd2caee9b5e7c34db5 Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 11 Jun 2021 14:10:19 +0000 Subject: [PATCH] * Patch from Henrique Werlang to fix setting correct state when modifying data --- packages/fcl-db/db.pas | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/fcl-db/db.pas b/packages/fcl-db/db.pas index e4a4092..4546700 100644 --- a/packages/fcl-db/db.pas +++ b/packages/fcl-db/db.pas @@ -2464,24 +2464,20 @@ end; procedure TDataSet.CalculateFields(var Buffer: TDataRecord); var i: Integer; - OldState: TDatasetState; begin FCalcBuffer := Buffer; + if FState <> dsInternalCalc then begin - OldState := FState; - FState := dsCalcFields; - try - ClearCalcFields(FCalcBuffer); - if not IsUniDirectional then - for i := 0 to FFieldList.Count - 1 do - if FFieldList[i].FieldKind = fkLookup then - FFieldList[i].CalcLookupValue; - finally - DoOnCalcFields; - FState := OldState; - end; + ClearCalcFields(FCalcBuffer); + + if not IsUniDirectional then + for i := 0 to FFieldList.Count - 1 do + if FFieldList[i].FieldKind = fkLookup then + FFieldList[i].CalcLookupValue; end; + + DoOnCalcFields; end; procedure TDataSet.CheckActive; @@ -3142,10 +3138,20 @@ begin end; procedure TDataSet.GetCalcFields(var Buffer: TDataRecord); - +var + i: Integer; + OldState: TDatasetState; begin if (FCalcFieldsCount > 0) or FInternalCalcFields then - CalculateFields(Buffer); + begin + OldState := FState; + FState := dsCalcFields; + try + CalculateFields(Buffer); + finally + FState := OldState; + end; + end; end; function TDataSet.GetCanModify: Boolean;