anchor.diff:  
   { TNullableUnicodeString }
   
  -
  +(*
   function TNullableUnicodeString.GetValue: UnicodeString;
   begin
     if (FIsNull) then
  
positive.code:     Result := FValue;
  end;
  
  function TNullableDouble.AsString: String;
  begin
    if Self.IsNull then
      Result := ''
    else
      Result := FloatToStr(Self.Value);
  end;
  
  function TNullableDouble.AsFloat: Double;
  begin
    if Self.IsNull then
      Result := 0
    else
      Result := Self.Value;
  end;
  
  { TNullableAnsiString }
  
  function TNullableAnsiString.GetValue: AnsiString;
  begin
    if (FIsNull) then
       Result := null
    else
      Result := FValue;
  end;
  
  procedure TNullableAnsiString.SetValue(AValue: AnsiString);
  begin
    FValue:= aValue;
    FIsNull := false;
  end;
  
  constructor TNullableAnsiString.Create;
  begin
    inherited Create;
  end;
  
  constructor TNullableAnsiString.Create(aValue: AnsiString);
  begin
    inherited Create;
    FValue := aValue;
  end;
  
  procedure TNullableAnsiString.Assign(aSource: TNullableAnsiString);
  begin
    if not aSource.IsNull then
      Self.Value := aSource.Value
    else
      Self.IsNull := true;
  end;
  
  procedure TNullableAnsiString.Assign(aSourceField: TField);
  begin
    if aSourceField.IsNull then
      Self.IsNull:= true
    else
      Self.Value:= aSourceField.AsString;
  end;
  
  procedure TNullableAnsiString.Assign(const aValue: String; const aBlankStringMeansNull: boolean);
  begin
    if aBlankStringMeansNull and (aValue = '') then
      Self.IsNull:= true
    else
      Self.Value:= Utf8ToAnsi(aValue);
  end;
  
  function TNullableAnsiString.AsVariant: Variant;
  begin
    if Self.FIsNull then
      Result := Null
    else
      Result := FValue;
  end;
  
  { TNullableDateTime }
  
  function TNullableDateTime.GetValue: TDateTime;
  begin
    Result := FValue;
  end;
  
  procedure TNullableDateTime.SetValue(AValue: TDateTime);
  begin
    FValue:= aValue;
    FIsNull := false;
  end;
  
  constructor TNullableDateTime.Create;
  begin
    inherited Create;
  end;
  
  constructor TNullableDateTime.Create(aValue: TDateTime);
  begin
    inherited Create;
    FValue := aValue;
  end;
  
  procedure TNullableDateTime.Assign(aSource: TNullableDateTime);
  begin
    if not aSource.IsNull then
      Self.Value := aSource.Value
    else
      Self.IsNull := true;
  end;
  
  procedure TNullableDateTime.Assign(aSourceField: TField);
  begin
    if aSourceField.IsNull then
      Self.IsNull:= true
    else
      Self.Value:= aSourceField.AsDateTime;
  end;
  
  procedure TNullableDateTime.Assign(const aValue: String; const aBlankStringMeansNull: boolean);
  begin
    Self.CheckIfDifferentAndAssign(aValue, aBlankStringMeansNull);
  end;
  
  function TNullableDateTime.AsVariant: Variant;
  begin
    if Self.FIsNull then
      Result := Null
    else
      Result := FValue;
  end;
  
  function TNullableDateTime.CheckIfDifferentAndAssign(const aValue: String; const aBlankStringMeansNull: boolean): boolean;
  var
    tmpDate : TDateTime;
  begin
    if aBlankStringMeansNull and (aValue = '') then
    begin
      Result := Self.NotNull;
      Self.IsNull:= true;
    end
    else
    begin
      if TryToUnderstandDateString(aValue, tmpDate) then
      begin
        Result := (Self.Value <> tmpDate);
        Self.Value:= tmpDate;
      end
      else
        raise Exception.Create('This string cannot be converted to date: ' + aValue);
    end;
  end;
  
  function TNullableDateTime.AsString(aShowTime: boolean): String;
  
negative.code: 
      procedure Assign(aSource : TNullableColor); overload;
      procedure Assign(aSourceField: TField); override; overload;
      procedure Assign(const aValue : Variant); override; overload;
      procedure Assign(const aValue : String); override; overload;
      function AsVariant : Variant; override;
      function AsString : String;
  
  