RPGLE *SRVPGM et CCSID

RPG (3 et 4, free), CL, SQL, etc...
Répondre
bvaron
Messages : 16
Enregistré le : jeu. 08 oct. 2020, 07:24:50

RPGLE *SRVPGM et CCSID

Message par bvaron »

Bonjour,

J'ai un service programme SQLRPGLE qui doit faire du SQL (DESCRIBE SQLDA) sur des tables encodées en CCSID 1200. (UTF-16 Unicode, big endian)

Le souci, c'est que mon serveur est en CCSID 1147, et que le décodage au moment du Fetch ne fonctionne pas.
Si mon job est en CCSID 37, à priori, ça fonctionne, mis à part les constantes de mon source qui sont encodées en 1147.

Un DSPSRVPGM sur mon *SRVPGM :

Code : Tout sélectionner

Profil utilisateur . . . . . . . . . . . . . . . :   *USER
Utilisation des droits adoptés . . . . . . . . . :   *YES 
ID codé de jeu de caractères . . . . . . . . . . :   65535
En C ou CPP, il est possible de spécifier un paramètre LOCALETYPE() pour la génération des modules, mais pas en RPG.

Quelqu'un a t'il une idée pour générer un SRVPGM RPG en CCSID 37 ?

Note : Je peux affecter le code 37 à mes constantes, mais ce n'est disponible qu'en V7 il me semble. (ça m'embête)
Sinon, je peux faire un fichier source en CCSID 37, et mettre cette fonction particulière dedans.

Enfin, bref, j'imagine qu'il y a plusieurs solutions, si vous avez de l'expérience là dedans, je suis preneur :D

Merci par avance.

nbonnet
Messages : 208
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: RPGLE *SRVPGM et CCSID

Message par nbonnet »

Bonsoir Bruno,

Pour moi il y a plusieurs sujets :

- le CCSID du source
- le CCSID des constantes
- le CCSID des variables RPG
- le CCSID des données SQL, à transférer dans des variables RPG

Et tu as raison, il y a beaucoup de facilités avec la 7.2 + TR.

En gros :
le CCSID importe peu ; les variables RPG sont dans le CCSID du job à l'exécution
par contre le CCSID du source limite les valeurs de constantes que tu peux mettre (sauf à utiliser une notation hexadécimale ou unicode ...)
Tu peux depuis la 7.2 indiquer un CCSID différent pour chaque variable, et de façon globale pour les CHAR / Unicode.
Il est possible de déclarer des variables RPG UTF16 pour lire des données UTF16 par SQL. Sinon tu auras une conversion des données dans le CCSID de la variable (à priori celui du job) et donc des conversions qui n'aboutissent pas toujours.

Quelques infos :
https://www.gaia.fr/download/publicatio ... ancees.pdf
https://www.scottklement.com/presentati ... %20RPG.pdf
Nathanaël

bvaron
Messages : 16
Enregistré le : jeu. 08 oct. 2020, 07:24:50

Re: RPGLE *SRVPGM et CCSID

Message par bvaron »

Merci pour ta réponse Nathanaël,

Effectivement, j'ai pour le moment trouvé une solution transitoire.
J'ai un define pour la compil sur le niveau de release.

Code : Tout sélectionner

 /if defined(CCSID)                                                                          
D ao              s              1a        Inz('{') Ccsid(37)              accolade ouvrante 
D af              s              1a        Inz('}') Ccsid(37)              accolade fermante 
D co              s              1a        Inz('[') Ccsid(37)              crochet ouvrant   
D cf              s              1a        Inz(']') Ccsid(37)              crochet fermant   
 /else                                                                                       
D ao              s              1a        Inz('{')                        accolade ouvrante 
D af              s              1a        Inz('}')                        accolade fermante 
D co              s              1a        Inz('[')                        crochet ouvrant   
D cf              s              1a        Inz(']')                        crochet fermant   
 /endif                                                                                      
 
Oui, oui, je sais, je ne suis pas en full free, mais pour tout dire ... ça me saoule :-D
Puis, au début de ma procédure, je fais un chgjob CCSID(37) et je reviens au CCSID de départ avant le return ...

deuxième souci, la commande CRTSQLRPGI ne comporte pas de paramètre DEFINE()

En fonction de la release de compil, j'insère un "/define CCSID" au début d'un source temporaire, puis je copie mon source puis le CRTSQLRPGI.

J'ai un automate de compilation, dieu merci ^^

À priori, ça roule, merci encore.

Bonne journée.

bvaron
Messages : 16
Enregistré le : jeu. 08 oct. 2020, 07:24:50

Re: RPGLE *SRVPGM et CCSID

Message par bvaron »

Oui, oui, je sais, je ne suis pas en full free, mais pour tout dire ... ça me saoule :-D
Et pour aggraver mon cas, je suis resté fidèle à SEU. (un peu modifié, mais quand même)
:D

bvaron
Messages : 16
Enregistré le : jeu. 08 oct. 2020, 07:24:50

Re: RPGLE *SRVPGM et CCSID

Message par bvaron »

Je suis une buse, j'ai tout remplacé avantageusement par :

Code : Tout sélectionner

D ao              s              1a        Inz(x'C0')                      accolade ouvrante
D af              s              1a        Inz(x'D0')                      accolade fermante
D co              s              1a        Inz(x'BA')                      crochet ouvrant  
D cf              s              1a        Inz(x'BB')                      crochet fermant  
ça fonctionne en V5R4 ^^

Répondre