소스 검색

* Displayvalues can omit false part. Fix issue #39371

(cherry picked from commit d9996607b83d3306aea61fb11db3307a87973afc)
Michaël Van Canneyt 3 년 전
부모
커밋
c2a86a9bc8
2개의 변경된 파일21개의 추가작업 그리고 2개의 파일을 삭제
  1. 4 2
      packages/fcl-db/src/base/fields.inc
  2. 17 0
      packages/fcl-db/tests/testdbbasics.pas

+ 4 - 2
packages/fcl-db/src/base/fields.inc

@@ -2669,11 +2669,13 @@ Procedure TBooleanField.SetDisplayValues(const AValue : String);
 var I : longint;
 
 begin
+  if aValue='' then
+    DatabaseErrorFmt(SFieldError+SInvalidDisplayValues,[DisplayName,AValue]);
   If FDisplayValues<>AValue then
     begin
     I:=Pos(';',AValue);
-    If (I<2) or (I=Length(AValue)) then
-      DatabaseErrorFmt(SFieldError+SInvalidDisplayValues,[DisplayName,AValue]);
+    If I=0 then
+      I:=Length(aValue)+1;
     FdisplayValues:=AValue;
     // Store display values and their uppercase equivalents;
     FDisplays[False,True]:=Copy(AValue,1,I-1);

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

@@ -35,6 +35,7 @@ type
     procedure TestSupportWordFields;
     procedure TestSupportStringFields;
     procedure TestSupportBooleanFields;
+    procedure TestSupportBooleanFieldDisplayValue;
     procedure TestSupportFloatFields;
     procedure TestSupportLargeIntFields;
     procedure TestSupportDateFields;
@@ -2716,6 +2717,22 @@ begin
   ds.Close;
 end;
 
+procedure TTestDBBasics.TestSupportBooleanFieldDisplayValue;
+var i          : byte;
+    ds         : TDataset;
+    Fld        : TField;
+    BoolFld : TBooleanField absolute Fld;
+begin
+  TestFieldDefinition(ftBoolean,2,ds,Fld);
+  CheckEquals(TBooleanField,Fld.ClassType,'Correct class');
+  BoolFld.DisplayValues:='+';
+  ds.Edit;
+  Fld.AsBoolean:=True;
+  CheckEquals('+',Fld.DisplayText,'Correct true');
+  Fld.AsBoolean:=False;
+  CheckEquals('',Fld.DisplayText,'Correct false');
+end;
+
 procedure TTestDBBasics.TestSupportFloatFields;
 
 var i          : byte;