Создание отчетов к БД в Delphi. Формирование отчетов "вручную". Содержимое запроса. Настройка TurboDelphiExplorer для работы с отчетами с помощью компонентов FastReport, страница 5

    TempSQL.SQL.Add('(Select Student.st_bilet from student where gruppa='+chr($27)+SDIAppForm.GrName.Text+chr($27)+'));');

    TempSQL.Open;

end;

frxReport1.ShowReport(true);

end;

пример выполнения данного кода приведен на рис. 5.4.

Рисунок 5.4 Отчет «Экзаменационная ведомость»


5.4 Работа с отчетом FastReport из Delphi в «Run-time» режиме

Описанные  операции по настройкам свойств оттдельных элементов отчета (и даже генерации его «с нуля») можно осуществить и во время выполнения программы. Основная сложность здесь состоит в том, что объекты, содержащиеся в отчете (такие как страница отчета, полоса и пр.) напрямую недоступны из вашего кода. Это означает, что к ним нельзя обратиться по имени, как например к кнопке на другой форме. Чтобы обратиться к объекту, нужно найти его с помощью метода TfrxReport.FindObject:

varpole1 : TfrxMemoView; //объект текстового поля отчета.

Pole1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

После этого можно обращатьсяя к свойствам и методам найденного объекта.

Обращение к странице может быть осуществлено следующим образом:

var

  Page1: TfrxReportPage;

Page1 := frxReport1.Pages[1]  as TfrxReportPage;

Обратите внимание, что индекс массива Pages равен 1. Нулевой индекс имеет страница «Данные» (которая у вас пуста!)

Прежде чем что-либо искать в отчете, необходимо загрузить его из файла следующим методом:

frxReport1.LoadFromFile(‘c:\temp\vedom_cut.fr3’);

Указанный метод является логической функцией, возвращающей true при успешной загрузке и false в случае ошибки. Это удобное средство дополнительной диагностики работы с отчетом. Настоятельно рекомендуется указывать полный путь к файлу.

Используя описанные выше методы, обработчик кнопки просмотра отчета можно переписать, например, так:

procedure TSDIAppForm.Button1Click(Sender: TObject);

var

Page1: TfrxReportPage;

Master:TfrxMasterdata;

polya: array [0..4] of TfrxMemoView;

begin

   With DM1 do

   begin

    TempSQL.Close;

    TempSQL.SQL.Clear;

    TempSQL.SQL.Add('Select * from Session_Result  ');

    TempSQL.SQL.Add(' where (Dis_shifr ='+ chr($27)+ Disc_table.FieldByName('Dis_Shifr').value+ chr($27)+')');

    TempSQL.SQL.Add(' and (forma_otchetnosti ='+chr($27) +SDIAppForm.Otchetnost.Text+chr($27)+')');

    TempSQL.SQL.Add(' and (st_bilet in ');

    TempSQL.SQL.Add('(Select Student.st_bilet from student where gruppa='+chr($27)+SDIAppForm.GrName.Text+chr($27)+'));');

    TempSQL.Open;

 //   TempSQL.last;

//    showMessage(IntTostr(TempSQL.RecordCount));

   end;

  if  frxReport1.LoadFromFile('c:\temp\vedom_cut.fr3') then

begin

DataModule1.frxDBDataSet1.open;

frxReport1.DataSets.Add(DataModule1.frxDBDataSet1); //назначаемотчетуновыйисточникданных

master:=frxReport1.Findobject('MasterData1') as TfrxMasterdata;

Master.Dataset:= DataModule1.frxDBDataSet1;

polya[0]:=frxReport1.FindObject('Memo3') as TfrxMemoView; //фрагментшапкисдисциплиной

polya[0].DataSet:= DataModule1.frxDBDataSet1;

polya[0].Text:='ведомость  ( [frxDBDataset1."Forma_otchetnosti"] ) подисциплине " [frxDBDataset1."dis_name"] "';

polya[1]:=frxReport1.FindObject('Memo2') as TfrxMemoView; //полефамилия

polya[1].DataSet:= DataModule1.frxDBDataSet1;

polya[1].DataField:='Surname';

polya[1].Text:='[frxDBDataset1."Surname"]';

polya[2]:=frxReport1.FindObject('Memo4') as TfrxMemoView; //полеимя

    polya[2].DataSet:= DataModule1.frxDBDataSet1;

    polya[2].DataField:='Firstname';

    polya[2].Text:='8 [frxDBDataset1."Firstname"]';

    polya[3]:=frxReport1.FindObject('Memo5') as TfrxMemoView; //полеотчество

    polya[3].DataSet:= DataModule1.frxDBDataSet1;

    polya[3].DataField:='Otch';

    polya[3].Text:=' [frxDBDataset1."Otch"]';

    polya[4]:=frxReport1.FindObject('Memo6') as TfrxMemoView; //полестуд. билет

    polya[4].DataSet:= DataModule1.frxDBDataSet1;

    polya[4].DataField:='St_bilet';

    polya[4].Text:='* [frxDBDataset1."St_bilet"]';

  frxReport1.ShowReport(true);

   end

   else ShowMessage('Ошибказагрузкифайлаотчета!');

end;

5.5 Создание отчета с двумя уровнями данных (master-detail)