Строковая проблема в Rave Reports 8 - PullRequest
0 голосов
/ 02 июня 2010

В настоящее время мы работаем с 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 ]

1 голос
/ 30 ноября 2010

Поскольку Delphi 2009 Unicode стал кодировкой строки по умолчанию, поэтому, когда вы объявляете String var, вы получаете строку Unicode вместо строки Ansi. Нет способа изменить поведение по умолчанию (которое было источником множества ошибок, которые трудно найти и которые трудно исправить, если не исправить). Если проблема связана с вашим исходным кодом, вы можете попробовать явно изменить строковую кодировку на ANSI вместо использования по умолчанию. Если проблема связана с отчетами, созданными с помощью редактора Rave, мы нашли обходной путь, заключающийся в компиляции отчетов со старой версией Rave (ранее 7.5), которая, кажется, работает нормально.

1 голос
/ 02 июня 2010

Что за несчастный случай, я делаю то же самое вчера. 19 из 20 отчетов работают нормально. Проблема с этим была сценарий, использующий SetParam и DataMemo с ContainsRTF = True.

Мое решение для SetParam состояло в том, чтобы заменить его вычисляемыми полями в моем DataSet. Для DataMemo с ContainsRTF = True я не нашел другого решения, кроме переключения ContainsRTF на False (но, к счастью, RTF на самом деле не нужен)

0 голосов
/ 31 января 2011

Это неисправимая проблема с юникодом, существующая с версии 7.5.

...