anchor.diff:    public
       constructor Create(); virtual;
       function AsVariant: Variant; virtual; abstract;
  +    procedure Assign(aSourceField : TField); overload; virtual; abstract;
  +    procedure Assign (const aValue : String; const aBlankStringMeansNull : boolean); overload; virtual; abstract;
   
       property IsNull : Boolean read FIsNull write FIsNull;
       property NotNull : Boolean read GetNotNull;
  
positive.code:       class function CreateNew(): TNullableAnsiString; overload;
  
        procedure Assign(aSource : TNullableAnsiString); overload;
        procedure Assign(aSourceField : TField); overload;
        function AsVariant: Variant; override;
  
        property Value : AnsiString read GetValue write SetValue;
  
negative.code:     Self.Value:= aSourceField.AsFloat;
  end;
  
  procedure TNullableDouble.Assign(const aValue: String; const aBlankStringMeansNull: boolean);
  begin
    if aBlankStringMeansNull and (aValue = '') then
      Self.IsNull:= true
    else
      Self.Value:= StrToFloat(aValue);
  end;
  
  function TNullableDouble.AsVariant: Variant;
  begin
    if Self.FIsNull then
  