IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Problème avec CString.Format


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut Problème avec CString.Format
    Bonjour,

    Depuis 5 ans j'ai ce bout de code qui fonctionne sans souci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // fonction
    CString ToSQLString(CString sql)
    {
    	sql.Replace("'", "''");
    	sql.Format("'%s'", sql);
    	return sql;
    }
     
    //et dans le code appellant
    CString s = ToSQLString(CTime::GetCurrentTime().Format("%H%M%S"))
    jusqu'à present j'avais toujours
    s = '165517' // par exemple.

    Depuis aujourd'hui, la même fonction renvoit des fois
    s = ''''''''

    Quelqu'un a une explication?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    ton projet n'est pas en UNICODE des fois ?

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je ne suis pas certain que ça compilerait si c'était le cas.

    Non, ça ressemble plus à un changement dans l'implémentation de la fonction CString::Replace()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par farscape
    salut,
    ton projet n'est pas en UNICODE des fois ?
    Non. Jeu de caractère non défini

    Médinoc, sql.Replace retourne bien ce qu'il me faut.
    C'est sql.Format qui 'foire'. J'ai comme l'impression que faire sql.format("%s",sql) ne lui plait pas.

    Quand je passe par une étape intermédiare comme ci dessous, ça marche très bien.

    Exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CString ToSQLString(CString sql)
    {
    	CString s;
    	sql.Replace("'", "''");
    	s.Format("'%s'", sql);
    	return s;
    }
    Quelqu'un peu essayer chez lui les deux versions de ToSqlString avec le paramètre CTime::GetCurrentTime().Format("%H%M%S") ?

    Merci

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    alors essaye plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s.Format("'%s'",static_cast<const char *>( sql));

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    ça marche aussi ... tout comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CString ToSQLString(CString sql)
    {
    	CString s;
    	sql.Replace("'", "''");
    	s.Format("'%s'", sql);
    	return s;
    }
    C'est pareil.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    farscape: Ton code force la CString à forker, c'est ça ?

    En tout cas, je pense que le sql.Format("'%s'", sql) est un comportement aussi indéfini que sprintf(str, "%s", str) ---> Un truc à bannir, quoi...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec CString::Format
    Par wajdi86 dans le forum MFC
    Réponses: 2
    Dernier message: 21/09/2011, 15h17
  2. Problème avec les Formats de Date
    Par sebac dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/01/2008, 15h30
  3. Problème avec le format des décimaux
    Par layouni dans le forum Framework .NET
    Réponses: 1
    Dernier message: 14/02/2007, 13h43
  4. Problème avec le format HTML pendant le parsing
    Par hatemnafti dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 28/11/2006, 10h54
  5. Problème avec CString
    Par emric591 dans le forum C++
    Réponses: 7
    Dernier message: 15/11/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo