Как правильно использовать клоны курсора для отношений Master-Detail в FireDac?

Страдалецъ
Дата: 13.10.2019 19:18:25
Видимо я делаю что-то не так, но если я делаю клон курсора по мастеру и по детали, то перебор записей в клоне курсора для мастера не приводит к обновлению данных для клона курсора в детали. Делаю я так:
 mtFiles := TFDMemTable.Create(nil);
 mtFiles.CloneCursor(FDFiles);
 mtMetering := TFDMemTable.Create(nil);
 mtMetering.CloneCursor(FDMetering,True,True);

и теперь если я буду перебирать записи для клона мастера
while not mtFiles.Eof
 do begin
     OutputDebugString(PChar(mtFiles['RecID']))
     OutputDebugString(PChar(mtMetering['FileID']));
     mtFiles.Next;
     end;

Естественно отношение мастер-деталь для исходных FDFiles и FDMetering настроено и хорошо работает.
Dmitry Arefiev
Дата: 13.10.2019 19:36:16
Мастер-детали и клоны никак не связаны. Клонам нужны свои установки.
Страдалецъ
Дата: 13.10.2019 19:38:10
А как тогда правильно сделать? Мне категорически не хочется создавать копию исходных запросов, но видимо иначе никак.
Hammer
Дата: 15.10.2019 10:50:35
Страдалецъ
А как тогда правильно сделать? Мне категорически не хочется создавать копию исходных запросов, но видимо иначе никак.


var
...
  dsMaster: TDataSource;
...
begin
...
  mtFiles := TFDMemTable.Create(nil);
  try
    mtFiles.CloneCursor(FDFiles);
    dsMaster := TDataSource.Create(nil);
    try
      dsMaster.DataSet := mtFiles;
      mtMetering := TFDMemTable.Create(nil);
      try
        mtMetering.MasterSource := dsMaster;
        mtMetering.MasterFields :=
        mtMetering.DetailFields := 
        mtMetering.CloneCursor(FDMetering,True,True);
        ...
      finally
        FreeAndNil(mtMetering);
      end;
    finally
      FreeAndNil(dsMaster);
    end;
  finally
    FreeAndNil(mtFiles);
  end;
...
end

Не?