Master-detail: а если деталей две?

отредактировано 06:53 Раздел: FastReport 3.0
Использую в FR3 в качестве источника данных TfrxADOQuery.
Для master-detail обычно делаю группировку по одному выходному НД.

Но вот появилась потребность в отчете, где для мастера требуется 2 разных детали.
Решил сделать через бэнды MasterData - DetailData и, соответственно, несколько НД (один мастер и две детали,
каждый НД содержит все необходимые записи).

И сразу засада: В доке по ФР показывается, как легко это сделать для НД типа Table, у которых есть свойства Master и MasterFields.
А у TfrxQuery есть только свойство Master (а MasterFields ни разу нет!) . Так что связать полученные НД ни фига не получилось

Извратился тем, что к детальным НД добавил еще один параметр (id_master), и закрываю-открываю их после отрисовки каждой мастер-строки.
Работает. Но ооо..чень долго.

Выход есть?

Комментарии

  • gpigpi
    отредактировано 06:53
    написал:
    А у TfrxQuery есть только свойство Master (а MasterFields ни разу нет!) . Так что связать полученные НД ни фига не получилось
    Query связываются через свойство Master и параметры
    написал:
    Извратился тем, что к детальным НД добавил еще один параметр (id_master), и закрываю-открываю их после отрисовки каждой мастер-строки.
    Ну, так и должно быть, т.е. в детаил-запросе пишете ... where id_master=:id , где id_master - поле детаил-датасета, а id - поле мастер-датасета. Переоткрывать датасеты не нужно - это выполняется автоматически. Если работает медленно, оптимизируйте детаил-запрос
  • отредактировано 06:53
    2gpi: Иными словами, невозможно построить мастер-деталь, получив с сервера оба НД за один раз?? Оптимизировать запрос - это, конечно дело. Но если это ХП, выполняющая некую обработку, то вызов ее один раз для возврата 5 тыс. строк идет гораздо быстрее, чем тысяча вызовов, каждый из которых возвращает 5 строк.
    А что, мастер-деталь для объектов типа Table работает по такому же принципу?? Не знал...

  • gpigpi
    отредактировано September 2007
    написал:
    Но если это ХП, выполняющая некую обработку, то вызов ее один раз для возврата 5 тыс. строк идет гораздо быстрее, чем тысяча вызовов, каждый из которых возвращает 5 строк.
    Тогда записывайте результаты ХП в промежуточную (временную) таблицу и работайте с ней
    написал:
    Иными словами, невозможно построить мастер-деталь, получив с сервера оба НД за один раз??
    Можно. Делать выборку в один датасет и выводить, используя группировку
  • отредактировано 06:53
    Насчет одного датасета я в курсе :) )) Вопрос был именно про несколько. И все же - так что там с М-Д на двух TTable? Ко второй табле идет многократный запрос во время построения отчета?
    Просто чтобы знать наверняка...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.