Browse Source

+ implemented TStringField.FixedChar
+ Enabled check for FixedChar in TParam.AssignFieldValue
+ added test for the above
+ added test for TDataset.Close

git-svn-id: trunk@3548 -

joost 19 years ago
parent
commit
8b13640dc6
4 changed files with 55 additions and 1 deletions
  1. 3 0
      fcl/db/db.pp
  2. 1 1
      fcl/db/dsparams.inc
  3. 1 0
      fcl/db/fields.inc
  4. 50 0
      fcl/dbtests/testdbbasics.pas

+ 3 - 0
fcl/db/db.pp

@@ -386,6 +386,8 @@ type
 { TStringField }
 { TStringField }
 
 
   TStringField = class(TField)
   TStringField = class(TField)
+  private
+    FFixedChar : boolean;
   protected
   protected
     class procedure CheckTypeSize(AValue: Longint); override;
     class procedure CheckTypeSize(AValue: Longint); override;
     function GetAsBoolean: Boolean; override;
     function GetAsBoolean: Boolean; override;
@@ -406,6 +408,7 @@ type
     procedure SetVarValue(const AValue: Variant); override;
     procedure SetVarValue(const AValue: Variant); override;
   public
   public
     constructor Create(AOwner: TComponent); override;
     constructor Create(AOwner: TComponent); override;
+    property FixedChar : Boolean read FFixedChar write FFixedChar;
   published
   published
     property Size default 20;
     property Size default 20;
   end;
   end;

+ 1 - 1
fcl/db/dsparams.inc

@@ -765,7 +765,7 @@ begin
   If Assigned(Field) then
   If Assigned(Field) then
     begin
     begin
     // Need TField.FixedChar property.
     // Need TField.FixedChar property.
-    if (Field.DataType = ftString) {and TStringField(Field).FixedChar} then
+    if (Field.DataType = ftString) and TStringField(Field).FixedChar then
       DataType:=ftFixedChar
       DataType:=ftFixedChar
     else if (Field.DataType = ftMemo) and (Field.Size > 255) then
     else if (Field.DataType = ftMemo) and (Field.Size > 255) then
       DataType:=ftString
       DataType:=ftString

+ 1 - 0
fcl/db/fields.inc

@@ -960,6 +960,7 @@ constructor TStringField.Create(AOwner: TComponent);
 begin
 begin
   Inherited Create(AOwner);
   Inherited Create(AOwner);
   SetDataType(ftString);
   SetDataType(ftString);
+  FFixedChar := False;
   Size:=20;
   Size:=20;
 end;
 end;
 
 

+ 50 - 0
fcl/dbtests/testdbbasics.pas

@@ -23,6 +23,9 @@ type
     procedure TearDown; override;
     procedure TearDown; override;
     procedure RunTest; override;
     procedure RunTest; override;
   published
   published
+    procedure TestDoubleClose;
+    procedure TestAssignFieldftString;
+    procedure TestAssignFieldftFixedChar;
     procedure TestSelectQueryBasics;
     procedure TestSelectQueryBasics;
     procedure TestPostOnlyInEditState;
     procedure TestPostOnlyInEditState;
     procedure TestMove;                    // bug 5048
     procedure TestMove;                    // bug 5048
@@ -268,6 +271,53 @@ begin
 //  inherited RunTest;
 //  inherited RunTest;
 end;
 end;
 
 
+procedure TTestDBBasics.TestDoubleClose;
+begin
+  with DBConnector.GetNDataset(1) do
+    begin
+    close;
+    close;
+    open;
+    close;
+    close;
+    end;
+end;
+
+procedure TTestDBBasics.TestAssignFieldftString;
+var AParam : TParam;
+    AField : TField;
+begin
+  AParam := TParam.Create(nil);
+
+  with DBConnector.GetNDataset(1) do
+    begin
+    open;
+    AField := fieldbyname('name');
+    (AField as tstringfield).FixedChar := true;
+    AParam.AssignField(AField);
+    AssertTrue(ftFixedChar=AParam.DataType);
+    close;
+    end;
+  AParam.Free;
+end;
+
+procedure TTestDBBasics.TestAssignFieldftFixedChar;
+var AParam : TParam;
+    AField : TField;
+begin
+  AParam := TParam.Create(nil);
+  with DBConnector.GetNDataset(1) do
+    begin
+    open;
+    AField := fieldbyname('name');
+    (AField as tstringfield).FixedChar := true;
+    AParam.AssignField(AField);
+    AssertTrue(ftFixedChar=AParam.DataType);
+    close;
+    end;
+  AParam.Free;
+end;
+
 { TSQLTestSetup }
 { TSQLTestSetup }
 procedure TDBBasicsTestSetup.OneTimeSetup;
 procedure TDBBasicsTestSetup.OneTimeSetup;
 begin
 begin