DBX с ClientDataSet

отредактировано 21:51 Раздел: FastReport 3.0
Предлагается для теста вариант DBX с поддержкой ClientDataSet. Внутренняя реализация немного отличается от стандартной поэтому допускаю некоторую несовместимость. Для проверки существующую версию надо убрать в сторону, заменить этой и перекомпилять/переустановить.

Комментарии

  • отредактировано 21:51
    У меня была когда-то подобная реализация. Пришлось отказаться, из-за проблем с master-detail. Проверьте у себя.
  • отредактировано 21:51
    А можно конкретней в чём проблемы?
    В нашей системе сейчас порядка 200 отчётов и многие используют связку Master->Detail.
  • отредактировано 21:51
    Detail не фильтровался при движении по мастеру - для каждой записи мастера всегда выводился полный список detail.
  • отредактировано 21:51
    написал:
    Detail не фильтровался при движении по мастеру - для каждой записи мастера всегда выводился полный список detail.

    Что выступает в качестве Master и Detail? Оба ClientDataSet? Или для Detail можно DBXQuery?
  • отредактировано 21:51
    У меня была реализация ClientDataset и для таблицы, и для запроса. В случае связки двух таблиц по master-detail была описанная ошибка.
  • отредактировано 21:51
    Извини, но не понял. Что значит "ClientDataset и для таблицы, и для запроса"? Источником данных для набора является либо таблица либо запрос, ты об этом?
    Я не о внутренней реализации.
    Я просто спросил в отчёте Master и Detail были ClientDataset или только мастер был ClientDataset .
  • отредактировано 21:51
    Действительно если в качестве Detail ClientDataSet, то detail не обновляется. Приходится переоткрывать руками на каждой строке мастера.

    Попробую покопать, может удасться исправить.
  • отредактировано 21:51
    Результаты раскопок

    Для ClientDataSet MasterDetail можно задать только как и для TTablу (BDE). Т.е. определяя MasterSource, MasterFields, IndexFieldNames, причём в where запроса не надо указывать условие как для случая Master->Detail с TQuery.

    Наблюдается нехороший эффект поскольку для связи строится индекс по полям указанным в IndexFieldNames, условие сортировки заданное в order by запроса игнорируется. Если хочется сохранить сортировку необходимо дописать эти поля в IndexFieldNames.

    Т.е. в принципе можно реализовать это, достаточно добавить два свойства MasterFields, IndexFieldNamesдля и поправаить реализацию SetMaster.

    Либо переоткрывать Detail набор перед печатью, например на OnBeforePrint у MasterBand.

    Вопрос:
    Надо ли это? и Что будем делать? ;)

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

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