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

fcl-db: base: if either MinValue or MaxValue is <> 0 then use range MinValue-MaxValue instead of MinRange-MaxRange (for TLongintField). It is compatible with other Fields and allows set range 0-X or X-0. Bug #26606

git-svn-id: trunk@28531 -
lacak 11 жил өмнө
parent
commit
9703d14149

+ 12 - 23
packages/fcl-db/src/base/fields.inc

@@ -1479,11 +1479,10 @@ begin
   If CheckRange(AValue) then
     SetData(@AValue)
   else
-    begin
-    if FMinValue<>0 then Min:=FMinValue else Min:=FMinRange;
-    if FMaxValue<>0 then Max:=FMaxValue else Max:=FMaxRange;
-    RangeError(AValue,Min,Max);
-    end;
+    if (FMinValue<>0) or (FMaxValue<>0) then
+      RangeError(AValue,FMinValue,FMaxValue)
+    else
+      RangeError(AValue,FMinRange,FMaxRange);
 end;
 
 procedure TLongintField.SetVarValue(const AValue: Variant);
@@ -1511,15 +1510,10 @@ end;
 Function TLongintField.CheckRange(AValue : longint) : Boolean;
 
 begin
-  if FMaxValue = 0 then
-    Result := AValue<=FMaxRange
-  else
-    Result := AValue<=FMaxValue;
-
-  if FMinValue = 0 then
-    Result := Result and (AValue>=FMinRange)
+  if (FMinValue<>0) or (FMaxValue<>0) then
+    Result := (AValue>=FMinValue) and (AValue<=FMaxValue)
   else
-    Result := Result and (AValue>=FMinValue);
+    Result := (AValue>=FMinRange) and (AValue<=FMaxRange);
 end;
 
 Procedure TLongintField.SetMaxValue (AValue : longint);
@@ -1644,7 +1638,7 @@ begin
   If CheckRange(AValue) then
     SetData(@AValue)
   else
-    RangeError(AValue,FMinRange,FMaxRange);
+    RangeError(AValue,FMinValue,FMaxValue);
 end;
 
 procedure TLargeintField.SetAsInteger(AValue: Longint);
@@ -1679,15 +1673,10 @@ end;
 Function TLargeintField.CheckRange(AValue : largeint) : Boolean;
 
 begin
-  if FMaxValue = 0 then
-    Result := AValue<=FMaxRange
+  if (FMinValue<>0) or (FMaxValue<>0) then
+    Result := (AValue>=FMinValue) and (AValue<=FMaxValue)
   else
-    Result := AValue<=FMaxValue;
-
-  if FMinValue = 0 then
-    Result := Result and (AValue>=FMinRange)
-  else
-    Result := Result and (AValue>=FMinValue);
+    Result := (AValue>=FMinRange) and (AValue<=FMaxRange);
 end;
 
 Procedure TLargeintField.SetMaxValue (AValue : largeint);
@@ -2498,7 +2487,7 @@ procedure TBCDField.SetAsCurrency(AValue: Currency);
 
 begin
   If CheckRange(AValue) then
-    setdata(@AValue)
+    SetData(@AValue)
   else
     RangeError(AValue,FMinValue,FMaxValue);
 end;