anchor.diff:      procedure Add(const aNullableItem: TAbstractNullable);
     end;
   
  +  TNullableDateTime = class;
  +  TNullableString = class;
  +  TNullableDouble = class;
  +  TNullableInteger = class;
  +
  +  { TNullableStringRecord }
  +
  +  TNullableStringRecord = record
  +  private
  +    FValue : string;
  +    // https://forum.lazarus.freepascal.org/index.php?topic=31870.0
  +    //class operator Initialize (var aRec: TNullableStringRecord);
  +  public
  +    IsNull : boolean;
  +  public
  +    function Value : string;
  +    procedure SetNull;
  +    procedure SetValue (const aValue : String);
  +
  +    procedure Assign(const aSource : TNullableStringRecord); overload;
  +    procedure Assign(const aSourceField : TField; const aAllowBlankValue : boolean); overload;
  +    procedure Assign(const aValue : Variant);overload;
  +    procedure Assign(const aSource : TNullableString); overload;
  +    function AsVariant: Variant;
  +    procedure Trim();
  +    function AsString : String;
  +  end;
  +
  +  { TNullableDoubleRecord }
  +
  +  TNullableDoubleRecord = record
  +  private
  +    FValue : double;
  +  public
  +    IsNull : boolean;
  +  public
  +    function Value : double;
  +
  +    procedure SetNull;
  +    procedure SetValue (const aValue: Double);
  +
  +    procedure Assign(const aSource : TNullableDoubleRecord); overload;
  +    procedure Assign(const aSourceField : TField); overload;
  +    procedure Assign(const aValue : String); overload;
  +    procedure Assign(const aValue : Variant);overload;
  +    procedure Assign(const aSource : TNullableDouble); overload;
  +    function AsVariant: Variant;
  +    function AsString: String;
  +    function AsFloat: double;
  +  end;
  +
  +  { TNullableDateTimeRecord }
  +
  +  TNullableDateTimeRecord = record
  +  private
  +    FValue : TDateTime;
  +  public
  +    IsNull : boolean;
  +  public
  +    function Value : TDateTime;
  +    procedure SetNull;
  +    procedure SetValue (const aValue : TDateTime);
  +
  +    procedure Assign(const aSource : TNullableDatetimeRecord); overload;
  +    procedure Assign(const aSourceField : TField); overload;
  +    procedure Assign(const aValue : String); overload;
  +    procedure Assign(const aValue : Variant);overload;
  +    procedure Assign(const aSource : TNullableDateTime); overload;
  +    function AsVariant: Variant;
  +    function AsString (const aShowTime: boolean): String;
  +  end;
  +
  +  { TNullableIntegerRecord }
  +
  +  TNullableIntegerRecord = record
  +  public
  +    Value : integer;
  +    IsNull : boolean;
  +
  +    procedure SetNull;
  +    procedure SetValue (const aValue: Integer);
  +
  +    procedure Assign(const aSource : TNullableIntegerRecord); overload;
  +    procedure Assign(const aSourceField : TField); overload;
  +    procedure Assign(const aValue : String); overload;
  +    procedure Assign(const aValue : Variant);overload;
  +    procedure Assign(const aSource : TNullableInteger); overload;
  +    function AsVariant: Variant;
  +    function AsString: String;
  +    function AsInteger: integer;
  +  end;
  +
  +
     { TNullableString }
   
     TNullableString = class(TAbstractNullable)
  
positive.code: 
  { TNullableDoubleRecord }
  
  procedure TNullableDoubleRecord.SetNull;
  begin
    IsNull:= true;
    Value:= 0;
  end;
  
  procedure TNullableDoubleRecord.SetValue(const aValue: Double);
  begin
    IsNull:= false;
    Value:= aValue;
  end;
  
  procedure TNullableDoubleRecord.Assign(const aSource: TNullableDoubleRecord);
  begin
    IsNull:= aSource.IsNull;
    Value:= aSource.Value;
  end;
  
  procedure TNullableDoubleRecord.Assign(const aSourceField: TField);
  
negative.code:     property Value : TColor read GetValue write SetValue;
    end;
  
  
  
  implementation
  