Ver Fonte

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

Michaël Van Canneyt há 3 anos atrás
pai
commit
fecc6db4c2

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

@@ -2642,7 +2642,14 @@ var Temp : string;
 begin
   Temp:=UpperCase(AValue);
   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
     SetAsBoolean(True)
   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');
   Fld.AsBoolean:=False;
   CheckEquals('',Fld.DisplayText,'Correct false');
+  Fld.AsString:='+';
+  CheckEquals(true,Fld.AsBoolean,'Correct true');
+  Fld.AsString:='';
+  CheckEquals(False,Fld.AsBoolean,'Correct False');
 end;
 
 procedure TTestDBBasics.TestSupportFloatFields;