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

WinDev Discussion :

Le casse-tête des conversions de caractètres [WD16]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 204
    Points : 98
    Points
    98
    Par défaut Le casse-tête des conversions de caractètres
    Bonjour à tous,

    le code qui suit passe très bien, sauf dans certains cas: ou dans les zones Ecv.conclusions et Ecv.désaccord se retouvent avec des données telles que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	sdReq est une Source de Données
    	sRequete est une chaîne
    	sTmp est une chaîne
     
    	// il peut y avoir des apostrophes, alors on double les single quotes	
    	// sachant que ce champ est rempli par un champ RTF
    	sTmp = Remplace(Ecv.conclusions,"'","''")
    	Ecv.conclusions = sTmp
     
    	// on construit la requête	
    	sRequete = "UPDATE Ecv SET anneeexercice = " + Ecv.debutexercice + ", suivipar = '" + Ecv.suivipar + "', dossierclos =" + Ecv.dossierclos + ", conclusions = '" + Ecv.conclusions 
    	sRequete = sRequete + "', anneederegul = " + Ecv.anneederegul + ", reguleffectuee = '" + Ecv.reguleffectuee + "', Nat_Conclusions = '" + Ecv.Nat_Conclusions + "', desaccord = '" + Ecv.desaccord
    	sRequete = sRequete + "' WHERE IDEcv = " + Ecv.IDEcv + ";"

    avec le texte suivant dans Ecv.conclusions,MySQL me jette systématiquement:

    "C'est l'année de la régularisation"

    car là les caractères accentués sont remplacés par des séquences du type "\'e9" que MySQL interprète différemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE Ecv SET anneeexercice = 20120101, suivipar = 'VG', dossierclos =0, conclusions = '{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Trebuchet MS;}}
    {\colortbl ;\red0\green0\blue0;}
    {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\cf1\f0\fs17 c''est l''ann\''e9e de la r\''e9gularisation\cf0\par
    }
    ', anneederegul = 0, reguleffectuee = '0', Nat_Conclusions = '0', desaccord = '{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}}
    {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\f0\fs24\par
    }
    ' WHERE IDEcv = 52080;

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 204
    Points : 98
    Points
    98
    Par défaut
    Mille excuses, car j'ai clické par inadvertance le mauvais bouton.

    Mon message est de ce fait parti incomplet.

    Bien sûr l'instruction HModifie(Ecv) met à jour sans aucun problème, et en moins de lignes mais comme je voudrais comprendre, quelqu'un pourrait-il me dire comment appliquer les conversions dans le bon ordre. Est-ce chaineversUTF8 ?

    Merci pour toute aide

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 204
    Points : 98
    Points
    98
    Par défaut
    en fait j'ai trouvé la réponse dans ce forum: il ne suffit pas de doubler les apostrophes, il faut aussi doubler les "\" et ça fonctionne très normalement.
    CQFD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	// il peut y avoir des apostrophes, alors on double les single quotes	
    	// sachant que ce champ est rempli par un champ RTF
    	// il faut aussi doubler les \ car la conversion des caractères accentués les génère
    	sTmp = Remplace(Ecv.conclusions,"'","''")
    	Ecv.conclusions = Remplace(sTmp,"\","\\")
     
    	// on construit la requête	
    	sRequete = "UPDATE Ecv SET anneeexercice = " + Ecv.debutexercice + ", suivipar = '" + Ecv.suivipar + "', dossierclos =" + Ecv.dossierclos + ", conclusions = '" + Ecv.conclusions 
    	sRequete = sRequete + "', anneederegul = " + Ecv.anneederegul + ", reguleffectuee = '" + Ecv.reguleffectuee + "', Nat_Conclusions = '" + Ecv.Nat_Conclusions + "', desaccord = '" + Ecv.desaccord
    	sRequete = sRequete + "' WHERE IDEcv = " + Ecv.IDEcv + ";"
     
    	SI PAS HExécuteRequêteSQL(sdReq,ConnexionBase,sRequete) ALORS
    Bonnes Fêtes à tous.

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

Discussions similaires

  1. Du casse-tête des composants
    Par Laskar dans le forum Débuter
    Réponses: 1
    Dernier message: 27/06/2011, 14h10
  2. Latex, MathML ou le casse-tête des formules en html
    Par Zavonen dans le forum Contribuez
    Réponses: 10
    Dernier message: 09/12/2010, 18h54
  3. Le casse tête des aléatoires
    Par HeavenPunisher dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 12/10/2010, 12h51
  4. casse tête pour choper des colones d'une requète ?:?
    Par hiul dragonfel dans le forum Langage
    Réponses: 3
    Dernier message: 12/11/2009, 17h57
  5. mon casse-tête des versions php-Mysql
    Par marcel marie dans le forum Langage
    Réponses: 4
    Dernier message: 03/09/2007, 08h10

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