anchor.diff:  interface
   
   uses
  -  DB, Classes,
  +  DB, Classes, contnrs,
     mVirtualDataSet, mVirtualDataSetInterfaces, mSortConditions;
   
   const
  -  KEY_FIELD_NAME = 'KEY';
  +  KEY_FIELD_NAME = '_KEY';
   
   type
   
  
positive.code: begin
    FIDataProvider := aDataProvider;
    FSortedIndex.Clear;
  end;
  
  procedure TReadOnlyVirtualDatasetProvider.GetFieldValue(const AField: TField; const AIndex: Integer; out AValue: variant);
  var
    tmpI : IVDDatum;
  begin
    AValue := Null;
    if (aIndex >= 0) then
    begin
     if CompareText(aField.FieldName, KEY_FIELD_NAME) = 0 then
       aValue := aIndex
     else
     begin
       if FSortedIndex.Count > 0 then
       begin
         tmpI := IVDDatum(FSortedIndex.Items[aIndex]);
       end
       else
       begin
         tmpI := FIDataProvider.GetDatum(aIndex);
       end;
       aValue := tmpI.GetPropertyByFieldName(AField.FieldName);
     end;
    end;
  end;
  
  
negative.code:     else
      begin
        FSortedIndex.Clear;
        FGarbage.Clear;
        for i := 0 to Self.GetRecordCount -1 do
        begin
          tmp := TDatumShell.Create;
          FGarbage.Add(tmp);
          tmp.Datum := FIDataProvider.GetDatum(i);
          tmp.Idx:= i;
          FSortedIndex.Add(tmp);
        end;
        FCurrentSortConditions := aConditions;
        FCurrentSortFields.Clear;
        for i := 0 to aConditions.Count - 1 do
  