2010-10-31 3 views
8

Я создал отчет с помощью FastReport Designer и назвал его с помощью Delphi 6. Но DataSet для MasterData, и поля не оцениваются во время разработки. Я хочу установить эти свойства во время выполнения на основе выбранного DataSet. Как я могу это сделать? Как я могу получить доступ к DataSet из MasterData в Delphi перед вызовом предварительного просмотра/печати/дизайна? Добавлен следующий код в frxReport1BeforePrint.Как назначить динамический набор данных в FastReport?

t := frxReport1.FindObject('MasterData1') as TfrxMasterData; 
    //if Assigned(t) then 
    //t.DataSet := frxIBODataset1; 

    m := frxReport1.FindObject('mTenderType') as TfrxMemoView; 
    if Assigned(m) then 
    begin 
    m.DataSet := frxIBODataset1; 
    m.DataField := 'ACCOUNTNAME'; 
    m.Text := '[frxIBODataset1."ACCOUNTNAME"]'; 
    end; 

Но перед вызовом печати/дизайна/предварительного просмотра мне необходимо установить эти свойства. Любая помощь приветствуется.

ответ

2

Вы должны сначала указать, пытаетесь ли вы использовать набор данных, определенный в приложении, или набор данных, определенный непосредственно в отчете (вкладка «Данные» в дизайне FastReport)?

Если вы пытаетесь использовать набор данных, определенный внутри вашего приложения (например, экземпляр AdoDataset, определенный в одном из ваших модулей данных), для такой цели вам не нужно привязывать MasterBand к вашему набору данных , динамически. Внутри отчета ваш MasterBand привязан к экземпляру TfrxDbDataset во время разработки. Во время выполнения ваш экземпляр frxDbDataset может быть подключен к любому набору данных в вашем проекте.

Вот как это будет:

1- Вы уронить компонент frxReport и компонент frxDbDataset на вашей форме или данных-модуль. 2- В дизайнере отчетов перейдите в раздел «Наборы данных» и добавьте доступный файл frxDbDataset в список наборов данных отчета. 3- Вы добавляете диапазон основных данных и присваиваете свойству набора данных свойству Dataset значение frxDbDataset. -Теперь в вашем коде, перед показом или подготовки доклада, вы можете написать что-то вроде этого:

if MyOption = 1 then 
    frxDbDataset1.Dataset := AdoDataset1 
    else 
    frxDbDataset1.Dataset := AdoDataset2; 

Что бы вы назначили frxDbDataset будет распечатан на мастер-группе в отчете.

Если вы определяете набор данных непосредственно внутри отчета, используя конструктор FastReport; то все внутри вашего отчета. Просто откройте конструктор fastreport и сделайте следующее:

1- Перейдите на вкладку Данные и определите свои наборы данных (например, AdoQuery1). 2- Выберите объект «Отчет» из панели «Дерево отчетов». 3- В инспекторе объектов перейдите на вкладку «События». 4- Выберите подходящее событие; OnStartReport - хорошее событие для вашей работы. Дважды щелкните по нему, чтобы открыть редактор кода. 5. Теперь вы можете назначить набор данных, определенный на вкладке данных, в полосу основных данных, используя код PascalScript. Что-то вроде этого:

procedure frxReport1OnStartReport(Sender: TfrxComponent); 
begin 
    MasterData1.Dataset := <ADOQuery1."ADOQuery1">;  
end; 
+0

Ваше решение не работает с использованием FastReports4/delphi XE2 Я могу видеть, что группа печатается много раз, если я устанавливаю StartNewPage, однако я не вижу никаких данных в ней. Есть ли дополнительный шаг для определения полей для него (динамический, без учета типов данных)? – ertx

-1

Если вы используете FastReport 3+, то вы можете разместить компоненты базы данных inside отчет. Только вам нужно предоставить подключение к базе данных и запустить конструктор из вашего приложения.

Вы можете определить переменные, передать их из приложения и запустить файл отчета .fr3.

Смежные вопросы