Rave Reports 8中的字符串问题

时间:2010-06-02 00:28:19

标签: delphi rave-reports

我们目前正在使用Delphi 2006,但我们现在已经准备好继续使用Delphi 2010了。

问题在于我们的Rave报告,但是......

我们在使用Rave 8运行报告时遇到很多字符串错误。它们没有任何意义。 (报告编译时没有错误,我们甚至可以在Rave 6中运行它们而没有任何错误。)

更新的 错误发生在报告本身的事件脚本中。错误与字符串和字符串连接有关。

例如:

//This event causes access violation (in rtl140.bpl) at run time
{ Event for Page1.OnBeforeReport }
function Page1_OnBeforeReport(Self: TRavePage);
var
  s: String;
begin
  s := 'My text in param';
  s := s + ' and som more text';
  s := copy(s,1,length(s)) + ' and then some more';           //<-- This line causes AV
  RaveProject.SetParam('MyTestParam', s);
end OnBeforeReport;


//This event works OK
{ Event for Page1.OnBeforeReport }
function Page1_OnBeforeReport(Self: TRavePage);
var
  s: String;
begin
  s := 'My text in param';
  s := s + ' and som more text';
  s := copy(s,1,length(s));                                   //<-- This line is OK
  RaveProject.SetParam('MyTestParam', s);
end OnBeforeReport;


//This event works OK too
{ Event for Page1.OnBeforeReport }
function Page1_OnBeforeReport(Self: TRavePage);
var
  s: String;
begin
  s := 'My text in param';
  s := s + ' and som more text';
  s := copy(s,1,length(s)) + s;                               //<-- This line is OK
  RaveProject.SetParam('MyTestParam', s);
end OnBeforeReport;

我们真的很想坚持Rave,因为我们有很多报告(150+),有很多功能(sql语句,事件等)。此外,我们的客户也设计了自己的自定义报告。

有人知道这些错误的原因吗?
这些问题有解决方案或解决方法吗?

3 个答案:

答案 0 :(得分:1)

出了什么意外,昨天我做了同样的事情。 19个来自20个报告工作正常。一个问题是使用SetParam和DataMemo的脚本,ContainsRTF = True。

我对SetParam的解决方案是用我的DataSet中的计算字段替换它。对于包含ContainsRTF = True的DataMemo,我发现除了将ContainsRTF切换为False之外没有解决方案(但我很幸运,RTF并不是真的需要)

答案 1 :(得分:1)

由于Delphi 2009 Unicode已成为默认的字符串编码,因此当您声明String var时,您将获得Unicode字符串而不是Ansi字符串。 没有办法改变默认行为(这是很多难以发现的错误的来源,而且难以修复的错误也是如此)。 如果问题来自您的源代码,您可以尝试显式将字符串编码更改为ANSI而不是使用默认值。 如果问题来自使用Rave编辑器创建的报告,我们发现的解决方法是使用较旧版本的Rave(之前的7.5)编译报告,这似乎工作正常。

答案 2 :(得分:0)

这是一个不可救药的unicode问题,自7.5版本以来一直存在。