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

Langage SQL Discussion :

Requete SQL et caractere spéciaux


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Requete SQL et caractere spéciaux
    Bonjour,
    mon environement:
    page ASP avec requete SQL sur base ACCESS 2000.
    voila mon problème:
    1 - Dans ma page ASP je fais une première requete sur une table access pour récupérer des noms de services.
    2 - fait une boucle qui met le nom de service en variable
    3 - j'execute une 2ème requete qui utilise cette variable.

    ça c'est OK.

    Le problème c'est que certains champs contienent des caracteres ' et la 2ème requete ne fonctionne plus. (il m'est impossible de modifier la table source)
    Y a t-il une syntaxe pour dire à SQL que le contenu de la variable est du texte ?
    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 451
    Points
    28 451
    Par défaut
    Pour être pris en compte dans une chaîne, un caractère ' doit être doublé...

  3. #3
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Crée dabord la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function dosql(ch)
       dosql = replace(ch,"""","""""")
       dosql = replace(dosql,"'","''")
    end function
    puis utilise la de cette facon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     chaine = dosql(chaine)

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci pour la conversion, mais pour mon traitement cela ne convient pas.
    Je m'explique:

    je fais une requete pour avoir la liste des mes services puis je recherche cette même liste dans ma table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    "SELECT Nom_site, GEP_code_client, DIP_situation 
    FROM Inventaire 
    GROUP BY GEP_code_client, Nom_site, DIP_situation 
    HAVING Nom_site='"&Vsite&"' AND Nom_site Is Not Null AND Nom_site<>'' AND GEP_code_client Is Not Null AND GEP_code_client<>'' AND DIP_situation='OCCUPE' 
    ORDER BY GEP_code_client"
     
    Set Vue_INV_MOA = Server.CreateObject("ADODB.Recordset")
     
    Vue_INV_MOA.Open sql, CONN_INV, 1, 1
    Puis je créé une boucle qui vas mettre le nom du premier service en variable et commencer à générer ma page WEB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    code_client = Vue_INV_MOA.fields("service")
    La variable prend bien comme valeur le contenu du champ de ma table.(Même s'il y à le caractère ' .

    Exemple de contenue de variable: COTE D'OR

    Toujours dans ma boucle je fais une autre requete qui utilise ma variable et compare la chaine de caractere avec un autre champ de manière à sélectionner toutes les informations du service en cours de traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "SELECT Nom_site, GEP_code_client, DIP_situation, AUDIT_date, DIP_Nom, AUDIT_SN 
    FROM Inventaire 
    WHERE Nom_site='"&Vsite&"' AND Nom_site Is Not Null AND Nom_site<>'' AND GEP_code_client is not null AND GEP_code_client = '"+code_client+"' AND DIP_situation='OCCUPE' AND AUDIT_date Is Not Null"
    Et là, la requete interprète mal le contenu de ma variable à partir du moment ou il y à le caractere '.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 451
    Points
    28 451
    Par défaut
    Citation Envoyé par gsacilot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "...WHERE Nom_site='"&Vsite&"' ..."
    Et là, la requete interprète mal le contenu de ma variable à partir du moment ou il y à le caractere '.
    En effet, c'est pouquoi il faut doubler les caractères ' à l'intérieur de la variable Vsite avant de l'insérer dans la chaine de requête.

    Au passage, la clause HAVING s'applique sur le résultat d'une fonction de regroupement (SUM, MAX, ...). Dans ton cas, un WHERE suffirait dans la première requête.

  6. #6
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    utilise la fonction dosql() que je t'ai donné avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...&dosql(Vsite)&...

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    OK, partons du principe ou je double tous les carratère ' qui entrent dans ma variable "code_client".
    Le contenu de ma variable (en exemple) sera donc
    Comment je fais maintenant dans ma 2ème requete pour rechercher le contenue de ma variable dans ma table ?

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 451
    Points
    28 451
    Par défaut
    Ne change rien à ta construction de requête...

  9. #9
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Encore une fois pour recherché ta valeur dans sa table tu utilise la fonction dosql(Nom_var) que je t'ai donné.

    A chaque fois que du doi utiliser une variable succeptible de contenir des ' ou des " tu remplace ta_variable par dosql(ta_variable)

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 111
    Points : 28 451
    Points
    28 451
    Par défaut
    Pour être plus clair...
    Si tu ne doubles pas tes ' dans la variable, ta requête contiendra le filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE Nom_Site = 'COTE D'OR' AND ...
    Si tu les doubles, cela donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE Nom_Site = 'COTE D''OR' AND ...
    ce qui fonctionne beaucoup mieux !

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    J'ai du louper quelque chose.
    N'ésitez pas à me parler franchement.

    Si je cherche
    dans une le champ de ma table qui contient
    je pense que le résultat sera null.

  12. #12
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Non cala fonctionnera, le programme saura interpréter comme il le faut ton code.

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut COOL
    LA NUIT PORTE CONSEIL

    Je suis désolé, hier je n'avais pas capté que si ma requete interprète la variable avec un seul caractère ' elle doit forcément l'interprèter avec deux caracteres ''.

    J'ai donc mis en pratique tous vos conseils ce matin et CA MARCHE

    MERCI à reno_tidus et al1_24

    Pour la petit histoire, je bosse dans une SSII et en septembre 2006 je suis placé en mission chez un client sur un poste d'administrateur.
    Mais le client s'était trompé de profil. Le boulot c'est gérer et développer un intranet (HTML, ASP, SQL, ACCESS) qui assiste la gestion de parc.
    C'est super interescent mais je n'y connaissais rien. J'ai relevé mes manches et hier c'était ma première question sur un forum. voila

    MERCI encore.

  14. #14
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Heureux de t'avoir aidé et c'est vrai que la nuit porte souvent conseil.

    Si ton problème est résolu pense à

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

Discussions similaires

  1. execution requete sql caractère spéciaux
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/02/2008, 17h04
  2. requete sql sur un caractere spécial
    Par alexkickstand dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/06/2007, 20h31
  3. Caractere d'echappement dans une requete SQL
    Par Seth77 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/01/2007, 09h56
  4. [SQL] Caractere spéciaux °
    Par zoreil dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/07/2006, 13h50
  5. [JDBC]Caractères spéciaux dans une requete SQL
    Par frizby dans le forum JDBC
    Réponses: 2
    Dernier message: 28/11/2005, 18h01

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