为什么Delphi中的Fast Report VCL在编辑变量时会引发堆栈溢出异常?

raj*_*azo 0 delphi delphi-5 fastreport

我正在使用Delphi 5和Fast Report 4来编写报表.我在设计时在MyReport.f3中定义了一个变量"ReportTitle",并在运行时为其分配了一个值.为什么我的代码会引发EStackOverflow异常?

这是代码示例

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

Cos*_*und 8

用这个:

frxrprt1.Variables['ReportTitle'] := '''Sales Summary Report''';
Run Code Online (Sandbox Code Playgroud)

"变量"值实际上被视为完整的表达式; 如果你想要它是一个字符串,它需要是一个标准的pascal常量,使用单勾引用; 而且,由于您是使用pascal代码执行此操作,因此需要通过双引号引用引号.

你可能会得到堆栈溢出,因为快速报告的脚本引擎试图弄清楚你编写的任何内容并遇到递归问题.


小智 6

或者你可以用另一种方式.

  frxrprt1.Variables['ReportTitle'] := QuotedStr('Sales Summary Report');
Run Code Online (Sandbox Code Playgroud)

函数QuotedStr返回字符串S,引用单引号.这意味着S用单引号括起来,S中的每个引号都加倍.它相当于对AnsiQuotedStr的调用(s,'''').