Bonjour tout le monde,
Je me décide à poster car je n'arrive pas à trouver une réponse à mon problème malgré le fait que cela fait plusieurs jours que je recherche une solution. Et bien sur il faut absolument que j'arrive à résoudre ce problème (sinon je ne serais pas la ^^)
Je travaille sous Qt creator 2.4.1 basé sur QT 4.7.4 (sous win 7), pour lire dans une base de données SQL (en 2008 R2). La base de données est celle de notre gestion commerciale "sage 100". Je travaille qu'en lecture sur cette bdd, aucune insertion. Utilisation du driver SQL Native Client 10.0 pour le DSN.
Mon problème est lorsque je fais un 'select', le résultat retourné m'affiche des caractères '?' au lieu des caractères spéciaux 'éèî' etc. Tous les autres caractères s'affichent correctement. Les caractères qui posent problème sont ceux faisant partis de caractères étendus ASCII (cf: http://www.asciitable.com/ )
Voici une partie du code utilisé dans ma classe:
dans le .h mes variables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 QSqlQuery *maQuery ; QString reponseReq ; QSqlDatabase maDb ;
dans le cpp, ma fonction de connection à ma base:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 maDb = QSqlDatabase::addDatabase("QODBC"); qDebug() << maDb.isValid(); maDb.setHostName("serveur3"); maDb.setDatabaseName("gecotesttt"); maDb.setUserName("admin"); maDb.setPassword("XXX"); maQuery = new QSqlQuery ;
toujours ds le cpp, ma fonction d'execution de la requête (le select est allégé ici)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 maQuery->prepare("SELECT F_DOCENTETE.DO_Piece, F_LIVRAISON.LI_Adresse, F_LIVRAISON.LI_Telephone, F_COMPTET.CT_EMail, F_DOCENTETE.DO_Type FROM F_DOCENTETE FULL OUTER JOIN F_LIVRAISON ON F_DOCENTETE.LI_No = F_LIVRAISON.LI_No FULL OUTER JOIN F_COMPTET ON F_LIVRAISON.CT_Num = F_COMPTET.CT_Num WHERE F_DOCENTETE.DO_Piece = :premierevaleur AND F_DOCENTETE.DO_Type = :deuxiemevaleur") ; maQuery->bindValue(":premierevaleur", numDoc); maQuery->bindValue(":deuxiemevaleur", choixTypeDocument); ... while(maQuery->next()) { for(int x=0; x < maQuery->record().count(); ++x) { reponseReq = maQuery->value(x).toString(); qDebug() << "Dans CBaseDeDonnées.cpp" << reponseReq ; } ... }
Ce que j'ai déja tenté:
- J'ai modifié l'encodage de mes pages de code en choisisant "UTF-8".
- J'ai bien inscrit ces 3 lignes dans le main:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
- J'ai recherché à définir une option pour la connection à ma base en définissant l'encodage de ma base mais je n'ai rien trouvé.
- de transformer le resultat de ma variable QSqlQuery (mais à chaque fois des erreurs de compilations apparaissent...)
- j'ai essayé d'utiliser la fonction "COLLATE" dans ma requete, mais le resultat obtenu ne corrige pas mon probleme. (COLLATE Latin1_General_BIN ou autre)
Autre remarque:
- je ne peux pas modifier directement l'encodage de ma base de données puisqu'elle est créée et remplie par un logiciel tiers. D'après ce que j'ai trouvé elle est en ISO-8859-1. Avec classement FRENCH_CI_AS
- Les données dans ma base de données sont bien encodées puisque si j'y accède par access excel ou autres, mes accents apparaissent correctement...
- suivant l'encodage, en mode debug, mes accents apparaissent soient en '?' ou alors en '177775'.
Merci de m'avoir lu. Toutes propositions / idées / questions sera accepté avec grand plaisir car la je ne sais plus du tout quoi faire...
merci de vos réponses !![]()
Partager