anchor.diff:      procedure DeleteRecord (AIndex :integer); virtual; abstract;
       procedure EditRecord (AIndex : integer; AModifiedFields : TList); virtual; abstract;
       procedure InsertRecord (AIndex : integer; AModifiedFields : TList); virtual; abstract;
  +    procedure Sort(aConditions : TSortByConditions); virtual; abstract;
   
       property VirtualFieldDefs : TVirtualFieldDefs read FVirtualFieldDefs;
     end;
  
positive.code:   Result   := 0;
    for I    := 0 to Dataset.Fields.Count - 1 do
      Result := Result + (NativeInt(Dataset.Fields[I]) shr (I mod 16));
  end;
  
  
  
negative.code:     BookmarkFlag : TBookmarkFlag;
    end;
  
    TVirtualFieldSortType = (stAscending, stDescending);
  
    { TSortByCondition }
  
    TSortByCondition = class (TCollectionItem)
    strict private
      FSortType : TVirtualFieldSortType;
      FFieldName : String;
    public
      constructor Create(Collection: TCollection); override;
  
      property SortType : TVirtualFieldSortType read FSortType write FSortType;
      property FieldName : String read FFieldName write FFieldName;
    end;
  
    { TSortByConditions }
  
    TSortByConditions = class (TCollection)
    private
      function GetCondition(Index :integer) : TSortByCondition;
    public
      constructor Create; reintroduce;
      function Add : TSortByCondition;
  
      property Items[index:integer]: TSortByCondition read GetCondition; default;
    end;
  
    TVirtualDatasetDataProvider = class
    strict private
      FVirtualFieldDefs : TVirtualFieldDefs;
  