Déjà, commence par utiliser des std::string au lieu de chaînes C. Ça t’évitera de te planter en comptant plus ou moins de caractères qu’il n’y en a en réalité (les zéro à la fin…).
std::string path = "Ma�anaDB.pdb (codage non valide)";
path = (*p_connect).esc_raw(path);
Non !
.c_str() te retourne une chaîne encodée (normalement la même que path après esc_raw), pour la décoder et retrouver ta valeur d’origine il faut utiliser binary_string :
[quote=“syam”]Déjà, commence par utiliser des std::string au lieu de chaînes C. Ça t’évitera de te planter en comptant plus ou moins de caractères qu’il n’y en a en réalité (les zéro à la fin…).
std::string path = "Ma�anaDB.pdb (codage non valide)";
path = (*p_connect).esc_raw(path);
[/quote]
Euh non sa veux pas parce que:
error: no matching function for call to ‘pqxx::basic_connection<pqxx::connect_direct>::esc_raw(const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’
j’editer le poste plus haut mai t’a du passer juste avant
Pour l’appel du esc_raw(const std::string&) l’objet à utiliser est la transaction (pqxx::transaction) et non pas la connexion (pqxx::basic_connection) – j’ai pas fait gaffe sur le coup.
Pour binary_string c’est aussi une erreur de ma part, en réalité c’est binarystring sans underscore entre les deux.
Pour t’y retrouver facilement dans la doc : pqxx.org/devprojects/libpqxx/doc … /main.html
Onglet “Classes” => toutes les classes définies par la lib
Une fois que tu es sur ces onglet, il y a un sous-onglet “Class Members” qui liste toutes les méthodes par ordre alphabétique, en indiquant à quelle(s) classe(s) chacune appartient.
Faut jamais oublier que la programmation, c’est avant tout savoir lire la doc…
[quote=« syam »]Pour l’appel du esc_raw(const std::string&) l’objet à utiliser est la transaction (pqxx::transaction) et non pas la connexion (pqxx::basic_connection) – j’ai pas fait gaffe sur le coup.
Pour binary_string c’est aussi une erreur de ma part, en réalité c’est binarystring sans underscore entre les deux.
Pour t’y retrouver facilement dans la doc : pqxx.org/devprojects/libpqxx/doc … /main.html
Onglet « Classes » => toutes les classes définies par la lib
Une fois que tu es sur ces onglet, il y a un sous-onglet « Class Members » qui liste toutes les méthodes par ordre alphabétique, en indiquant à quelle(s) classe(s) chacune appartient.
Faut jamais oublier que la programmation, c’est avant tout savoir lire la doc… [/quote]
arf la doc ,ta pas idée de la quantité que j’ai lu en 4 jours certes en traver … et c’est bien la le problème
la doc je commence a la connaitre ,mai pas forcement l’appliquer
Finalement il y a un petit souci qui c’est rajouter:
//en bref la déclaration de la fonction
void cSqlPqxx::InsertTPrincipal(const int & exist,const std::string & datescan,
const std::string & path)
std::cout << "===============Path====>"<< path << std::endl;
//le resulta(donnée) est pris a l'execution
const char * my_str = path.c_str();
size_t l_my_str = path.size();
//le resulta(donnée) est pris a la compilation
/*char my_str[]="/home/taz/Test/Ma�naDB.pdb";
int l_my_str = sizeof(my_str);*/
Je vai essayer de faire simple,mai quand c est compliquer :S
dans le premier cas, le path reçois la string directement du disque a l’execution puisque passe en paramettre. du coup le resulta est pas le meme et évidament est faux:
dans le 2 resulta est ok:
très certainement parce que c’est l’utf8 du fichier (le *.cpp) de la compilation qui est pris en compte.
devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?
devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?[/quote]
Oui ça devrait être bon. std::string se contrefout que tu sois en UTF-8, en ISO-8859 ou n’importe quoi d’autre, pour lui une chaîne c’est juste une séquence d’octets.
Faudrait voir ce que contient la variable path, et quelle est sa longueur :
Éventuellement écris aussi la variable dans un fichier, pour que tu puisses l’éditer en hexa et voir exactement quels caractères elle contient.
Le tout avant stockage dans la DB, et après l’avoir relu.
devrai être juste. puisque passer en paramettre, cepandant la conversion string char pose probleme , ou alors c’est plus loins dans la db que sa colle pas ?[/quote]
Oui ça devrait être bon. std::string se contrefout que tu sois en UTF-8, en ISO-8859 ou n’importe quoi d’autre, pour lui une chaîne c’est juste une séquence d’octets.
Faudrait voir ce que contient la variable path, et quelle est sa longueur :
Éventuellement écris aussi la variable dans un fichier, pour que tu puisses l’éditer en hexa et voir exactement quels caractères elle contient.
Le tout avant stockage dans la DB, et après l’avoir relu.[/quote]
dans un fichier ? … euh je croit pas que sa soie d’une utiliter , vu que j’avais tenter en debut de post de le faire, et que sur differente machine la valeur change. sinon la longueur renvoiyée est de 27 .