Afin de pouvoir lire correctement des données dans une base Firebird qui ont été encodées par le BDE avec charset Paradox Intl, voici la marche à suivre :
-
- Modifier le champ dans Firebird pour indiquer qu’il est stocké en DOS437, avec IBExpert, ou une requête telle que celle-ci :
\nupdate RDB$FIELDS set RDB$CHARACTER_SET_ID = 10 where RDB$FIELD_NAME = 'RDB$136';
(10 correspond au charset DOS437, et RDB$136 est l’identifiant du champ)
- Modifier le champ dans Firebird pour indiquer qu’il est stocké en DOS437, avec IBExpert, ou une requête telle que celle-ci :
-
- Ensuite, il faut préciser sur l’objet pFIBDatabase la propriété ConnectParams->CharSet = WIN1252.
Le principe est le suivant : si le champ est NONE -ou- le charset de la connexion est NONE, Firebird ne réalise AUCUNE translitération. Cependant si on se connecte avec WIN1251 (on lui indique ce qu’on veut voir), et qu’on lui indique le charset du champ (il est codé en DOS437), à ce moment là il convertit gentillement les données.\n\nA noter que cette méthode ne casse rien dans votre code Delphi / C++ Builder en tout ce qui concerne les connexions via le BDE, vu que le BDE se connecte toujours en charset NONE (d’un point de vue Firebird).\n\nVoir ici pour plus de renseignements : http://www.firebirdsql.org/file/documentation/drivers_documentation/Jaybird_2_1_JDBC_driver_manual.pdf Nous n’avions pas eu le problème avec JayBird/Java parce que même sans que Firebird fasse la conversion, c’était Java lui-même qui le faisait, en précisant simplement Cp437 au niveau de la chaine de connexion.