Как динамически назначить набор данных в FastReport? - PullRequest
9 голосов
/ 01 ноября 2010

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

  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;

Но мне нужно установить эти свойства перед вызовом print / design / preview. Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

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

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

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

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

  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 голосов
/ 01 ноября 2010

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

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

...