Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как правильно использовать клоны курсора для отношений Master-Detail в FireDac?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1395
Видимо я делаю что-то не так, но если я делаю клон курсора по мастеру и по детали, то перебор записей в клоне курсора для мастера не приводит к обновлению данных для клона курсора в детали. Делаю я так:
 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 настроено и хорошо работает.
13 окт 19, 19:18    [21993191]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно использовать клоны курсора для отношений Master-Detail в FireDac?  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9768
Мастер-детали и клоны никак не связаны. Клонам нужны свои установки.
13 окт 19, 19:36    [21993202]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно использовать клоны курсора для отношений Master-Detail в FireDac?  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1395
А как тогда правильно сделать? Мне категорически не хочется создавать копию исходных запросов, но видимо иначе никак.
13 окт 19, 19:38    [21993204]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно использовать клоны курсора для отношений Master-Detail в FireDac?  [new]
Hammer
Member

Откуда: Москва
Сообщений: 488
Страдалецъ
А как тогда правильно сделать? Мне категорически не хочется создавать копию исходных запросов, но видимо иначе никак.


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

Не?
15 окт 19, 10:50    [21994367]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить