Связь Dataset'a и MemoryDataset'a в отчете FastReport

Добрый день!
Суть дела такова: каким образом связать в FastReport Dataset и MemoryDataset? C двумя Dataset'ами - все понятно, ну а с MemoryDataset - вопрос, так как он заполняется не из select query. Или все же связь будет, если и там и там будет поле одинакового названия, например, ds_A.ID и mds_B.ID?

Нравится

5 комментариев

Здравствуйте.

От обычного датасета MemoryDataset отличается лишь тем, что у него нет SelectQuery, он не работает с базой вообще и может лишь хранить список записей (не постранично), и позволять вставку, редактирование, удаление и навигацию по записям. Заполнять датасет лучше всего в обработчике его события OnDatasetAfterOpen. Это значит, выполнять нужное количество раз операции:

Dataset.Append();
Dataset.Values('MyField') = MyValue;
Dataset.Post();

Такой датасет можно использовать в отчете, но при использовании его как DetailData Dataset, вам нужно каждый раз на OnDatsetAfterOpen заполнять вручную теми данными, которые являются "дочерними" для MasterData.

Также рекомендую ознакомится со следующей темами: http://www.community.terrasoft.ua/forum/topic/1630
http://www.community.terrasoft.ua/forum/topic/1312

Спасибо, Дмитрий, за ответ. Тему http://www.community.terrasoft.ua/forum/topic/1630 я уже видел, мне подобный способ не подходит. Этот вопрос был задан для реализации такого функционала http://www.community.terrasoft.ua/forum/topic/8365, а с помощью компонента DBCrossTab я не вижу возможности добиться подобной гибкости.

Constantine, в таком случае нужно вручную в коде заполнять MDS теми данными, которые бы мы получили в обычном Dataset'e c помощью sq, со включенным фильтром сравнения tbl_ChildTable.ParentID = :Parameter ParentID.

"Олейник Дмитрий" написал:в таком случае нужно вручную в коде заполнять MDS теми данными, которые бы мы получили в обычном Dataset'e c помощью sq, со включенным фильтром сравнения tbl_ChildTable.ParentID = :Parameter ParentID.

это все понятно, но как связать MasterData и DetailData? у них у обоих есть поле ID, в которых хранятся равные значения для связи, но как системе указать, что связывать их нужно именно по этим полям? на данный момент, как только я после MasterData ставлю DetailData, никаких данных не выводится вообще

Здравствуйте.

Master и Detail Data связываются указанием для Detail Data свойства MasterData. Для Master Data и Detail Data также привязываются датасеты (главный и подчиненный соответственно). Для того, чтобы в Detail Data была отображена только та информация, которая является подчиненной по какому либо признаку по отношению к Master Data, в сервисе Select query мы включаем фильтр сравнения, по какому либо полю таблицы, которое будет сравниваться с значением первичного ключа (ID) главного датасета.
Соответственно, в Detail Data, датасетом которой является MDS, такой фильтр включить не получится, именно потому, для корректного построения отчета, необходимо вручную заполнять его теми данными, которые будут уже отфильтрованы по полю внешнего ключа (т.е по первичному полю для главного датасета).

Показать все комментарии