Почему Fast Report VCL в Delphi вызывает исключение переполнения стека при редактировании переменной? - PullRequest
0 голосов
/ 11 мая 2011

Я использую Delphi 5 и Fast Report 4 для создания приложения отчета.Я определил переменную «ReportTitle» в MyReport.f3 во время разработки, и я присвоил ей значение во время выполнения.Почему мой код вызывает исключение EStackOverflow?

Вот пример кода

  frxrprt1.LoadFromFile('c:\MyReport.fr3');
  frxrprt1.Variables['ReportTitle'] := 'Sales Summary Report';
  frxrprt1.ShowReport;

Ответы [ 2 ]

8 голосов
/ 11 мая 2011

Используйте это:

frxrprt1.Variables['ReportTitle'] := '''Sales Summary Report''';

Значения «переменной» фактически обрабатываются как полноценные выражения;Если вы хотите, чтобы это была строка, это должна быть стандартная константа Паскаля, использующая одинарную кавычку;И поскольку вы делаете это из кода на языке Паскаль, вам нужно заключать в кавычки двойные кавычки.

Вероятно, вы получаете переполнение стека, потому что механизм сценариев быстрого отчета пытается разобраться во всем, что вы написали, и работаетв рекурсивную проблему.

6 голосов
/ 16 мая 2011

Или вы можете использовать другой способ.

  frxrprt1.Variables['ReportTitle'] := QuotedStr('Sales Summary Report');

Функция QuotedStr возвращает строку S, заключенную в одинарные кавычки. Это означает, что S заключен в одинарные кавычки, а каждая отдельная кавычка в S удваивается. Это эквивалентно вызову AnsiQuotedStr (s, '' '').

...