0

我们目前正在使用 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 语句、事件等)。此外,我们的客户也设计了自己的自定义报告。

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

4

3 回答 3

1

真是个意外,我昨天也做了同样的事情。20 份报告中的 19 份工作正常。问题在于使用 SetParam 和 DataMemo 且 ContainsRTF = True 的脚本。

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

于 2010-06-02T07:52:10.297 回答
1

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

于 2010-11-30T15:55:06.170 回答
0

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

于 2011-01-31T10:31:41.133 回答