2010-06-02 20 views
0

Nous travaillons actuellement avec Delphi 2006, mais nous sommes maintenant très prêt à passer à Delphi 2010.des problèmes de chaîne dans Rave Reports 8

Le problème réside dans nos rapports Rave, mais ...

Nous obtenons juste de nombreuses erreurs de chaîne lors de l'exécution de nos rapports avec Rave 8. Et ils n'ont tout simplement aucun sens. (Les rapports compilent sans erreur, et nous pouvons même les exécuter sans erreur dans Rave 6.)

Mise à jour: Les erreurs se produisent à l'intérieur des scripts d'événements dans les rapports lui-même. Les erreurs sont liées aux chaînes et à la concaténation de chaînes.

Par exemple:

//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; 

Nous voulons vraiment tenir à Rave, parce que nous avons beaucoup de rapports (150+) avec beaucoup de fonctionnalités (états SQL, événements, etc.). En outre, nous avons des clients qui ont conçu leurs propres rapports personnalisés.

Est-ce que quelqu'un connaît la raison de ces erreurs?
Y at-il une solution ou une solution à ces problèmes?

+0

Si quelqu'un a le code source (version payante de RAVE) nous avons finalement passé un certain temps à corriger plusieurs bugs. Je pourrais partager un Diff. –

Répondre

0

Il s'agit d'un problème incorrigible Unicode qui existe depuis la version 7.5.

1

Quel accident, je fais la même chose hier. 19 de 20 rapports fonctionnent bien. Le problème avec l'un était un script utilisant SetParam et DataMemo avec ContainsRTF = True.

Ma solution pour SetParam était de le remplacer par des champs calculés dans mon DataSet. Pour DataMemo avec ContainsRTF = True, je n'ai trouvé aucune autre solution que de passer ContainsRTF à False (mais j'ai de la chance, RTF n'était pas vraiment nécessaire)

+0

Merci pour cette astuce à propos de ContainsRTF, mais cela n'aiderait pas beaucoup dans notre cas. Les événements ci-dessus sont dans le rapport lui-même, pas dans Delphi. Et l'AV se produit en raison de la concaténation de chaîne, pas la méthode SetParam. –

+0

Le script dont je parle était aussi dans un rapport de rave. Avez-vous essayé (pour un test) de supprimer SetParam? J'ai testé la concaténation de chaînes et n'ai aucun problème. Et aussi important: Lorsque vous obtenez le premier AV, vous devez éteindre votre application. Car après cela, vous obtenez toujours un AV même si vous corrigez votre rapport Rave. –

+0

Désolé. Je ne ressens pas le même comportement. :-(J'ai essayé de supprimer le SetParam, mais sans modifier le comportement des rapports, et les AVs sont cohérents même si je redémarre l'application –

1

Depuis Delphi 2009 Unicode est devenu le codage de chaîne par défaut, donc quand vous déclarez une chaîne var vous obtenez une chaîne Unicode au lieu d'une chaîne Ansi. Il n'y a aucun moyen de changer le comportement par défaut (qui a été la source de beaucoup de bogues difficiles à trouver et plus difficiles à trouver). Si le problème provient de votre code source, vous pouvez essayer de modifier explicitement le codage de chaîne en ANSI au lieu d'utiliser le code par défaut. Si le problème provient des rapports créés avec l'éditeur Rave, nous avons trouvé une solution de contournement consistant à compiler les rapports avec une ancienne version de Rave (version 7.5), ce qui semble fonctionner correctement.

+0

Nous avons essayé de compiler les rapports avec une ancienne version, mais cela n'a pas fonctionné. Je suppose que les rapports étaient complexes. –