Как прицепить MasterBand к не сущ-му Dataset'у?
jonny3d
Чебоксары
Создаю frDB = CREATEOBJECT('FastReport.TfrxADODatabase'), цепляю его к базе.
Создаю frDataSet = CREATEOBJECT('FastReport.TfrxADOQuery'), даю ей имя 'c_Data', цепляю к frDB, назначаю запрос.
Создаю объект FR = CREATEOBJECT('FastReport.TfrxReport') и загружаю в него шаблон. В этом шаблоне только MasterData Band с Memo1, в которой - [c_Data."link"].
При выводе - ошибка отсутствия источника и это логично. Вопрос - как прицепить источник данных к отчету после его загрузки? По сути, всё сделано по примеру, идущему в комплекте с Fast Report Studio.
Если же c_Data (TfrxADOQuery) создать в самом шаблоне, то тогда d самом дизайнере я смогу прицепить MasterData1.DataSet = c_Data и, логично, всё заработает. Если же в шаблоне этого c_Data нет, а создаю его я извне, то как его прицепить к источнику MasterData?
ПС. Среда раз работки - Visual Fox Pro
ПС2. Есть опыт работы с FR2.54 в среде Делфи, а сейчас вот в VFP с FR3..
Комментарии
Пытаюсь найти MasterData, но не помогает. Возможно источники нужно как-то привязать к области видимости объекта-отчета. Есть там что-нибудь вроде справочника источников данных?
Вот что пытаюсь:
fr = CREATEOBJECT('FastReport.TfrxReport')
fr.LoadReportFromFile('test.fr3')
frBand = fr.FindObject('MasterData1')
frBand.DataSet = 'c_Data' && здесь происходит вылет..
Разве нельзя написать:
fr.Dataset:= 'c_Data'
Хотя опыта работы с Visual Fox PRo у меня нет.
Что, в принципе, и логично. 'c_Data' - это лишь свойство объекта, определенного за пределами экземпляра FastReport'а..
fr.Dataset = frDataset не катит с той же ошибкой..
В общем, всё как я и подозревал - наличие области "подключенных" источников данных. Созданный объект присоединяется к fr через SelectDataset.
Таким образом на данном этапе получаю:
OLE error: Не поддерживается
Что ж танцы с бубном иногда помогают. Есть решение, но оно мне НЕ НРАВИТСЯ
Что имеем. Шаблон с бендом и мемо. У бенда пустой источник. У мемо Memo1.Memo = '[c_Data."link"]'. Благо значение memo1 можно заполнить каким угодно текстом. С бендом MasterData1.Dataset такое категорически не катит - на запись значения идёт проверка существования источника. Как следствие, несуществующий dataset к бенду не прицепить. Плохо. Но с бубном и нанцами решаемо.
Первый шаг: Здесь уже источник имеется и c_Data свободно можно привязать к MasterData1.Dataset. После чего сохраняем шаблон.
Второй шаг, уже рабочий: Теперь подгружается шаблон с уже настроенным MasterData1, но! Но таким образом имя датасета жёстко прошивается в шаблоне. А сам датасет создается во внешней среде. Логично и ПРАВИЛЬНО привязывать бенд к созданному источнику сразу после создания, ибо имя не факт что будет такое. Иначе - получаю сильное ограничение..
Всё ещё остаюсь с вопросом как привязать MasterData1 к c_Data, которая уже видна в объекте FastReport (после SelectDataset)
В качестве варианта решения, вижу вынесение имени источника в скриптовую переменную в самом шаблоне. Перед генераций в самом шаблоне цеплять MasterData1 уже по содержимому переменной. А перенную эту уже инициализировать извне.. Пойду шаманить..
При неопределённом dataset'е бенда, датасет берётся из memo, в которой указан источник и имя поля. А в моем случае главное - указать дефолтный датасет (SelectDataset)
Правда назрел любопытный вопрос - что будет, если в одном таком бенде с неопределённым источником будут две мемы с разными источниками? Позже проверю..