Bonjour,
Je souhaiterais modifier des report par programmation.
(C# sous VS 2008 avec les composants .net de Crystal 2008) .
Ces reports ont été crées avec Crystal 8.5, et nous migrons sous Crystal 2008.
La base de données utilisée est Progress, qui permet de stocker des champs au format Tableau (appelé "extend").
A l'époque où les reports ont été crées, on exportait nos données dans des fichiers textes et Crystal s'en servait (via un pilote ODBC texte) comme source de données.
Pour certaines raisons les tables prenaient un suffixe "_TXT", et les champs de type "tableau" étaient éclatés dans le fichier texte :
Pour une table s'appelant MATABLE dans la base, on exportait une table nommée MATABLE_TXT.
Pour un champ de type tableau, ayant une profondeur de 4 (CHAMPTAB[4]) dans la base de données, on exportait 4 champs :
CHAMPTAB_1
CHAMPTAB_2
CHAMPTAB_3
CHAMPTAB_4
.
Ce que l'on souhaite faire avec Crystal 2008, est de se connecter via un autre pilote ODBC, directement à la base de données.
On arrive à modifier la source de données du report, et les tables sont "renommées" en supprimant le suffixe "_TXT".
Tout ceci fonctionne.
Mais les champs "tableaux" ne sont pas gérés de la même façon :
avec notre nouveau pilote ODBC, les champs tableaux deviennent des chaines de caractères concaténées :
CHAMPTAB contient "val1;val2;val3;val4"
Par un champ formule, il est simple d'extraire une valeur à un certain indice dans cette chaine.
Ceci, fait à la main dans Crystal fonctionne. Le souci est de le faire par programmation :
Analyser le report et repérer tous les champs en "_X".
Les remplacer par un champ formule du style : Split ({MATABLE.CHAMTAB}, ";")[X]
Mais on ne peu à priori pas créer de champs (formule) par programmation.
En résumé :
Je souhaiterais, par programmation, modifier les champs de type
MATABLE.MONCHAMP_1
en formule :
Split ({MATABLE.CHAMTAB}, ";")[1]
Merci d'avance si vous avez des solutions, ou si vous avez également eu ce genre de difficulté.
Partager