2
0
Эх сурвалжийг харах

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

michael 4 жил өмнө
parent
commit
5a942fb610
1 өөрчлөгдсөн 21 нэмэгдсэн , 15 устгасан
  1. 21 15
      packages/fcl-db/db.pas

+ 21 - 15
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;