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

Bases de données Delphi Discussion :

Conversion et re-conversion des caractères reservé à MySQL


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut Conversion et re-conversion des caractères reservé à MySQL
    Delphi 7 Enterprise | composants MyDAC (MySQL) | Windows XP Pro

    Mon Programme Delphi lance des requêtes sur une base de données du type MS Access 2000 (en local) via les composants ADO et mon programme transmet les données ensuite sur un serveur de base de données MySQL 4.

    Certains valeurs (strings) me posent un problème.

    Dans une partie de mon programme j'utilisé une fonction pour créer des requêtes (automatisée). De qu'il y à des caractères spéciaux du type:
    1. "
    2. '
    3. `

    dans ma variable data (type String) la requête n'aboutit plus.

    Ses caractères (réservé par MYSQL) sont utilisées pour indiquer des champs, etc. , et c'est justement cela qui me pose en problème en ce moment.

    Un Exemple :

    Si la variable data contient la valeur
    data := ' PIS ';
    La requête suivante (automatiquement généré par mon programme) passe très bien ....

    UPDATE DOSSIER SET DOS_ADRESSE1="PIS" WHERE I_DB_ID=2646;


    par contre si la requête contient par exemple
    data := ' "PIS" ';

    mon programme génère l'instruction MYSQL erronée:
    UPDATE DOSSIER SET DOS_ADRESSE1=""PIS"" WHERE I_DB_ID=2646;

    Remarque:
    Il y à dans ce cas deux guillemets en trop dans la chaîne!

    Mes questions:

    1. Est-que il y des fonctions ou des procédures dans Delphi pour gérer les signes spéciaux réserves aux requêtes MySQL?

    Si Qui, il sera sympas de me faire passer quelques lignes de code pour l'exemple.

    Dans l'autre cas si il n'y à pas des fonctions prévue dans Delphi pour contrer se genre de problème, au lieux de réinventer la roue, est-il possible de publier dans cette rubrique le code permettant de convertir et de reconvertir les signes spéciaux de MySQL?

    MERCI D'AVANCE

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 84
    Par défaut
    Ben de deux choses l'une, soit les requetes sont formulé dans le code, et à ce moment la il suffit de ne pas mettre de guillement.

    Soit les requetes sont construites à partir de champs remplis par les utilisateurs et la tu peux par exemple interdire l'emploi des guillement en utilisant l'evenement onkeypress dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if key='"' then key=chr(0);
    ou encore tu crées une procedure ou tu passes ta chahine en variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Tform1.enleveguillemet(var chaine :string);
    var i:integer;
          s:string;
    begin
    s:='';
    if chaine[1]='"' then for i:=2 to length(chaine)-1 do s:=s+chaine[i];
    chaine:=s;
    end;
    Ce qui enleve le premier et le dernier caractère.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Par défaut
    Salut,

    as-tu essayer le QuotedStr ?? comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'UPDATE DOSSIER SET DOS_ADRESSE1='+QuotedStr(Data)+' WHERE I_DB_ID=2646';
    je ne sais si cela résoudra ton problème... le plus "simùple" serait de passer des critères en paramètres... non :

    @+ 8)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut
    Bonjour Ced00 et Amenofis,

    Merci pour votre aide.

    Précision : Les personnes qui utilisent ma base de donnée ont le droit d'utiliser les carctères spéciaux dans les enregistrements.

    Il doit donc automatiquement y avoir une gestion des caractères spéciaux (MySQL) comme c'est par exemple le cas en HTML, pour ne pas entrer en conflit avec « interprétateur de commandes »de MySQL

    En HTML on remplace par exemple le caractère " (entre guillemets) par quot;

    Je pense en voyant vos réponses qu'il n'existe pas d'équivalent en Delphi en ce qui concerne mon problème avec la base de données MySQL.

    Je vois en ce moment qu'une solution c'est d'écrire le code pour ma propre gestion de caractères spéciaux MySQL.

    N'hésitez pas de poster un message si vous avez d'autres idées, car j'essaie de trouver un chemin simple pour résoudre mon petit problème.

    Merci d'avance

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 157
    Par défaut
    Et voila mon petit gestionnaire pour les caractère spéciaux de MySQL.

    Partie codage:

    { Remplacement de " par /q0001; }
    dataValue := StringReplace(dataValue, '"', 'q0001;', [rfReplaceAll]);

    {Remplacement de ' par /q0002; }
    dataValue := StringReplace(dataValue, '''', 'q0002;', [rfReplaceAll]);

    {Remplacement de ' par /q0003; }
    dataValue := StringReplace(dataValue, '`', 'q0003;', [rfReplaceAll]);

    dataValue := '"' + dataValue + '"';

    // etc.


    Partie décodage:

    { Remplacement de " par /q0001; }
    dataValue := StringReplace(dataValue, 'q0001;', '"', [rfReplaceAll]);

    {Remplacement de ' par /q0002; }
    dataValue := StringReplace(dataValue, 'q0002;' , '''', [rfReplaceAll]);

    {Remplacement de ' par /q0003; }
    dataValue := StringReplace(dataValue, 'q0003;', '`', [rfReplaceAll]);


    Petite explication : j'ai simplement inventé les codes du type /q000x.

    En espèrent que cela sera utile pour quelqu’un d'autre.

    Le problème à été résolu à manière.

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

Discussions similaires

  1. Encodage des caractères SGBD MySQL
    Par SckOss dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/12/2010, 15h27
  2. Réponses: 4
    Dernier message: 03/11/2009, 12h09
  3. Encodage des caractères dans MySql
    Par barbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/04/2009, 10h46
  4. Conversion des caractères spéciaux en &xyz;
    Par thomzon dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 05/09/2007, 08h35
  5. Réponses: 2
    Dernier message: 15/06/2007, 16h24

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