Browse Source

* AsString takes into account empty true or false. Fix issue #39371

Michaël Van Canneyt 3 years ago
parent
commit
fecc6db4c2
2 changed files with 12 additions and 1 deletions
  1. 8 1
      packages/fcl-db/src/base/fields.inc
  2. 4 0
      packages/fcl-db/tests/testdbbasics.pas

+ 8 - 1
packages/fcl-db/src/base/fields.inc

@@ -2642,7 +2642,14 @@ var Temp : string;
 begin
 begin
   Temp:=UpperCase(AValue);
   Temp:=UpperCase(AValue);
   if Temp='' then
   if Temp='' then
-    Clear
+    begin
+    if FDisplays[True,True]='' then
+      SetAsBoolean(True)
+    else if FDisplays[True,False]='' then
+      SetAsBoolean(False)
+    else
+      Clear
+    end
   else if pos(Temp, FDisplays[True,True])=1 then
   else if pos(Temp, FDisplays[True,True])=1 then
     SetAsBoolean(True)
     SetAsBoolean(True)
   else if pos(Temp, FDisplays[True,False])=1 then
   else if pos(Temp, FDisplays[True,False])=1 then

+ 4 - 0
packages/fcl-db/tests/testdbbasics.pas

@@ -2731,6 +2731,10 @@ begin
   CheckEquals('+',Fld.DisplayText,'Correct true');
   CheckEquals('+',Fld.DisplayText,'Correct true');
   Fld.AsBoolean:=False;
   Fld.AsBoolean:=False;
   CheckEquals('',Fld.DisplayText,'Correct false');
   CheckEquals('',Fld.DisplayText,'Correct false');
+  Fld.AsString:='+';
+  CheckEquals(true,Fld.AsBoolean,'Correct true');
+  Fld.AsString:='';
+  CheckEquals(False,Fld.AsBoolean,'Correct False');
 end;
 end;
 
 
 procedure TTestDBBasics.TestSupportFloatFields;
 procedure TTestDBBasics.TestSupportFloatFields;