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 :

Remédier au problème du " ' "


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 954
    Par défaut Remédier au problème du " ' "
    Bonjour,

    J'utilise souvent des requettes sql dans mes programmes exple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TAB.sql.add(update table1 set des='Zone D'instruction');
    TAB.execsql;
    Cette commande va renvoyer une erreur du fait que la valeur donnée au champs "des" contient une apostrophe. La solution immédiate serait de réécrire le code comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TAB.sql.add(update table1 set des='Zone D''instruction');
    TAB.execsql;
    Mais le probléme, c'est dans le cas ou la valeur du champs est variable et vient d'une autre table, comment la contrôler avant la validation?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    1- c'est un problème delphi pas firebird
    2- les deux SQL dans le code sont faux TAB.sql.add('update table1 set des='Zone D'instruction'');, la fonction add attends une chaine de caractères
    3- Il manque un Tab.SQL.Clear ou alors utilisez TAB.sql.Text:='update table1 set des='Zone D'instruction''; ;
    4- vous devriez utiliser une requête paramétrèe
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TAB.sql.Text:='update table1 set des=:d';
    TAb.ParambyName('d').asString:=QuotedStr('Zone D''instruction');
    Tab.ExecSQL;
    bien que cela n'empêchera pas d'avoir à utiliser la double apostrophe, mais c'est un problème de langage

    P.S. encore une fois vous avez oublié d'indiqué le type de composant utilisé !

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    je reprends ceci et juste je modifie pour répondre à "valeur du champs est variable"
    Citation Envoyé par SergioMaster Voir le message
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TAB.sql.Text:='update table1 set des=:d';
    TAb.ParambyName('d').asString:= Edit1.Text // DataSet1.FieldByName('d').AsString
    Tab.ExecSQL;
    P.S. encore une fois vous avez oublié d'indiqué le type de composant utilisé !
    Et je dirais qu'encore une fois, c'est la même question qui est posé avec la même réponse et chekkal n'écoute pas nos conseils

    Citation Envoyé par chekkal Voir le message
    Bonjour,
    moi j'utilise jamais les parambyname même si on me la beaucoup recommandé dans ce forum sinon...
    Et tout cela est tellement trivial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TAB.sql.Text := 'update table1 set des=' + QuotedStr(DataSet1.FieldByName('d').AsString);
    TAB.execsql;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Il n'y a aucun problème en ce cas, car vous n'affectez pas une constante délimitée par des quotes (c'est là qu'on peut avoir un souci avec les apostrophes) mais la valeur d'une colonne d'une table, et là, pas besoin de délimiteur

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 954
    Par défaut
    Il manque un Tab.SQL.Clear
    Non, je l'ai pas oublié, j'ai seulement oublié de le mentionner.
    Il n'y a aucun problème en ce cas, car vous n'affectez pas une constante délimitée par des quotes (c'est là qu'on peut avoir un souci avec les apostrophes) mais la valeur d'une colonne d'une table, et là, pas besoin de délimiteur
    j'ai pas compris.

  6. #6
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 139
    Billets dans le blog
    5
    Par défaut
    Pour avoir souvent rencontré ce type de problème j'utilise dans mon code chr(39) en lieu et place du ' et " pour tous ce qui est chaine de caractère dans les chaines sql
    exemple
    instruction SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `t_action` VALUES ('32', 'TestMoralOK', 'Signale la réussite d\'un test de moral');

    sera traduite en code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s:='INSERT INTO `t_action` VALUES ('+chr(39)+'32'+chr(39)+', '+chr(39)+'TestMoralOK'+chr(39)+');';

Discussions similaires

  1. [Système] Problème de quote
    Par mikebranque dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2006, 17h38
  2. Problème de quote avec XPath
    Par fadjerx dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 23/03/2006, 14h45
  3. [JS] Problème de quotes pour enregistrer un formulaire.
    Par polnioumane dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/10/2005, 17h04
  4. Problème de quotes sous PostGre
    Par Philhz dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/07/2004, 13h03
  5. Problème de quote
    Par kennini dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2003, 09h40

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