Создание скриптов из программы
Задача заключается в том, чтобы программно создать скрипт, меняющий в процессе построения отчета свойства компонента Table1: TfrBDETable, расположенного на диалоговой форме отчета FastReport.
Следующий код на Delphi создает скрипт для объекта Table1.
frReport1.LoadFromFile('Untitled.frf');
// Формирование скрипта
t := TfrBDETable(frReport1.FindObject('Table1'));
t.Script.Add('begin');
t.Script.Add('Table1.DatabaseName := [DataBase1];');
t.Script.Add('Table1.TableName := [TableName1];');
t.Script.Add('end');
// Задание переменных
frVariables := 'DBDEMOS';
frVariables := 'employee.db';
// Просмотр отчета
frReport1.ShowReport;
Но при построении отчета выдается ошибка, что имя таблицы пусто. Хотя скрипт реально создается. Проблема здесь не в программном создании скрипта.
При создании скрипта объекта Table1: TfrBDETable в дизайнере, отчет также не строится.
Насколько я понимаю, надо создавать скрипт для обработки события (OnActivate) диалоговой формы, на которой расположен объект Table1: TfrBDETable. Он должен выглядеть примерно так:
begin
Table1.DatabaseName := [DataBase1];
Table1.TableName := [TableName1];
end
В дизайнере отчетов его легко можно создать. И этот скрипт реально работает при построении отчета. Т.е. отчет формируется нормально. Но как это сделать из программы на Delphi не понятно. И можно ли вообще это сделать?
Понятно, что в Delphi можно сделать следующее:
t := TfrBDETable(frReport1.FindObject('Table1'));
t.Table.DatabaseName := 'DBDEMOS';
t.Table.TableName := 'employee.db';
Но хотелось бы программно на Delphi сформировать скрипт, который будет сам заполнять свойства компонента Table: TfrBDETable. Реально ли это сделать?
P.S. Являюсь зарегистрированным пользователем FastReport
Следующий код на Delphi создает скрипт для объекта Table1.
frReport1.LoadFromFile('Untitled.frf');
// Формирование скрипта
t := TfrBDETable(frReport1.FindObject('Table1'));
t.Script.Add('begin');
t.Script.Add('Table1.DatabaseName := [DataBase1];');
t.Script.Add('Table1.TableName := [TableName1];');
t.Script.Add('end');
// Задание переменных
frVariables := 'DBDEMOS';
frVariables := 'employee.db';
// Просмотр отчета
frReport1.ShowReport;
Но при построении отчета выдается ошибка, что имя таблицы пусто. Хотя скрипт реально создается. Проблема здесь не в программном создании скрипта.
При создании скрипта объекта Table1: TfrBDETable в дизайнере, отчет также не строится.
Насколько я понимаю, надо создавать скрипт для обработки события (OnActivate) диалоговой формы, на которой расположен объект Table1: TfrBDETable. Он должен выглядеть примерно так:
begin
Table1.DatabaseName := [DataBase1];
Table1.TableName := [TableName1];
end
В дизайнере отчетов его легко можно создать. И этот скрипт реально работает при построении отчета. Т.е. отчет формируется нормально. Но как это сделать из программы на Delphi не понятно. И можно ли вообще это сделать?
Понятно, что в Delphi можно сделать следующее:
t := TfrBDETable(frReport1.FindObject('Table1'));
t.Table.DatabaseName := 'DBDEMOS';
t.Table.TableName := 'employee.db';
Но хотелось бы программно на Delphi сформировать скрипт, который будет сам заполнять свойства компонента Table: TfrBDETable. Реально ли это сделать?
P.S. Являюсь зарегистрированным пользователем FastReport
Комментарии
p := TfrPage(frReport1.Pages[0]); // здесь нужный индекс
p.Script.Add('begin');
p.Script.Add('Table1.DatabaseName := [DataBase1];');
p.Script.Add('Table1.TableName := [TableName1];');
p.Script.Add('end');