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 Delphi Discussion :

QuotedStr et longueur de chaine


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut QuotedStr et longueur de chaine
    Bonjour,

    Lors de la première ouverture d'un logiciel je dois faire un insert dans une table.
    Il y a une colonne commentaire de type varchar(2000).

    Quand je fais:
    query.SQL.Appen('INSERT INTO ma_table (com) VALUES ' + QuotedStr('mon_text'));

    Avec "mon_text" étant une chaine de 1-200 caractères j'ai l'erreur "Chaine trop longue".

    Quelle autres méthode utilisé pour faire se genre d'insertion ?

    Merci

  2. #2
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut,

    Bizarre, utilises une requête paramétrée à tout hasard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    query.SQL.Append('INSERT INTO ma_table (com) VALUES (:mon_texte)');
    //.... et avant l'exécution de ta requête
    query.ParamByName('mon_texte').AsString := 'mon_text';
    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Salut,

    Bizarre, utilises une requête paramétrée à tout hasard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    query.SQL.Append('INSERT INTO ma_table (com) VALUES (:mon_texte)');
    //.... et avant l'exécution de ta requête
    query.ParamByName('mon_texte').AsString := 'mon_text';
    @+
    Merci e-ric j'ai utilisé cette méthode et ça fonctionne mais le problème est que j'ai environ 2200 insert à faire du coup j'ai cette structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Append('INSERT INTO ma_table (com) VALUES ' + (QuotedStr('mon_text1')), (QuotedStr('mon_text2')), ..);
    Je me vois mal faire 2000 fois
    - ma requete
    - remplacement du param
    - exec


  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    hum...ne serais-ce pas la longueur de ta requête qui est trop grande ?

    si tu fais deux requêtes de 1100 chaînes, est-ce que ça passe ?

    mais il faudrait surtout savoir si la base a une limite de longueur de requête car avec 2200 * 1..200 ça peut faire une requête assez longue.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 597
    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 597
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    ce qu'il faut ce n'est pas une query mais un script
    chaque insert étant séparé par des ;
    mais toutes les suites de composants DB ne le propose pas

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponse.
    En regardant l'affectation par les paramètre me donne la même erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qry.ParamByName('description').asString := mon_text
    Voici un vrai exemple de texte:
    Sinatra Select est une édition exclusive créée pour honorer la relation unique entre Franck Sinatra et Jack Daniel’s.
    2015 étant l’année du premier centenaire de la naissance de Frank Sinatra, Jack Daniel’s et la famille Sinatra ont souhaité célébrer l’événement en créant une édition inédite et limitée.

    Le Master Distiller a ainsi sélectionné quelques fûts artisanaux. Ces tonneaux “Sinatra” furent confectionnés pour apporter caractère et complexité au whiskey puisque celui-ci vieilli dans des fûts où des cannelures dans les douelles de bois toastés ont été réalisées.
    Cela permet d’amplifier la surface d’échange entre le bois et le whiskey. Les fûts apportent ainsi au Tennessee Whiskey des saveurs de chênes ainsi que des notes d’épices pour une finale subtilement vanillée. Sinatra Select est le whiskey le plus premium de la famille Jack Daniel’s.';
    Si il existe une méthode pour exécuter un script SQL je suis preneur, je me renseigne

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut Tout réside dans la préparation...
    Citation Envoyé par retwas Voir le message
    Merci e-ric j'ai utilisé cette méthode et ça fonctionne mais le problème est que j'ai environ 2200 insert à faire du coup j'ai cette structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Append('INSERT INTO ma_table (com) VALUES ' + (QuotedStr('mon_text1')), (QuotedStr('mon_text2')), ..);
    Je me vois mal faire 2000 fois
    - ma requete
    - remplacement du param
    - exec
    Y'a pas de raison d'avoir mal...

    Tu écris une seule fois le texte de ta requête avec paramètre(s), tu prépares le requête (méthode Prepare) puis dans une boucle, tu affectes le paramètre et tu exécutes, la méthode Prepare est prévue pour cela.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par retwas Voir le message
    Je me vois mal faire 2000 fois
    - ma requete
    - remplacement du param
    - exec

    Bonjour,

    Dans ce cas précis il faut utiliser directement une table en mode insert.

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Bonsoir,

    As-tu essayé ce que je t'ai proposé plus bas ?

    Citation Envoyé par BuzzLeclaire Voir le message
    Bonjour,

    Dans ce cas précis il faut utiliser directement une table en mode insert.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Tbl.Name := 'whisky';
    Tbl.open;
    Tbl.insert;
     
    Tbl.FieldByName('id_whisky').Value  := 1;
    Tbl.FieldByName('nom_whisky').Value := 'Glen grant 1952';
    Tbl.FieldByName('ref_whisky').Value := '1005';
    Tbl.FieldByName('degre_whisky').Value  := 40;
    Tbl.FieldByName('volume_whisky').Value := '70cl';
    Tbl.FieldByName('tourbe_whisky').Value := 'non tourbé';
    Tbl.FieldByName('recompense_whisky').Value := '';
    //...
    Tbl.FieldByName('description_whisky').Value := 'Ce single malt exprime tout son potentiel dans cette version sherry cask millésimée d''anthologie. De couleur ambrée à reflets dorés, le nez d''une étonnante fraîcheur se révèle très épicé (camphre, noix muscade). Il est également marqué par la cire et les fleurs capiteuses (lys). La bouche ample et puissante, immédiatement fruitée (mirabelle), se développe sur des notes florales et sur un boisé vanillé très fin. La finale huileuse évolue sur les fruits secs (noix de cajou), le chocolat et les épices douces (safran).';
     
    Tbl.Post;

    A toi te transformer en procédure pour pouvoir boucler dessus.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Bonsoir,

    As-tu essayé ce que je t'ai proposé plus bas ?



    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Tbl.Name := 'whisky';
    Tbl.open;
    Tbl.insert;
     
    Tbl.FieldByName('id_whisky').Value  := 1;
    Tbl.FieldByName('nom_whisky').Value := 'Glen grant 1952';
    Tbl.FieldByName('ref_whisky').Value := '1005';
    Tbl.FieldByName('degre_whisky').Value  := 40;
    Tbl.FieldByName('volume_whisky').Value := '70cl';
    Tbl.FieldByName('tourbe_whisky').Value := 'non tourbé';
    Tbl.FieldByName('recompense_whisky').Value := '';
    //...
    Tbl.FieldByName('description_whisky').Value ;= 'Ce single malt exprime tout son potentiel dans cette version sherry cask millésimée d''anthologie. De couleur ambrée à reflets dorés, le nez d''une étonnante fraîcheur se révèle très épicé (camphre, noix muscade). Il est également marqué par la cire et les fleurs capiteuses (lys). La bouche ample et puissante, immédiatement fruitée (mirabelle), se développe sur des notes florales et sur un boisé vanillé très fin. La finale huileuse évolue sur les fruits secs (noix de cajou), le chocolat et les épices douces (safran).';
     
    Tbl.Post;

    A toi te transformer en procédure pour pouvoir boucler dessus.
    Oui j'ai essayé mais même problème, j'ai l'erreur sur l'affectation du "fieldbyname('description_whisky')"


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

Discussions similaires

  1. [RegEx] Expression régulière et longueur de chaine
    Par cbroissa dans le forum Langage
    Réponses: 30
    Dernier message: 23/05/2006, 19h33
  2. [Debutant] Longueur de chaine
    Par georgeabitbol dans le forum Oracle
    Réponses: 2
    Dernier message: 20/03/2006, 16h42
  3. Liste modifiable : longueur de chaine.
    Par pifou02 dans le forum Access
    Réponses: 8
    Dernier message: 09/01/2006, 15h47
  4. [MySQL] controle numérique de longueur de chaine en php
    Par melli dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/12/2005, 11h24
  5. BDE, la longueur de chaine ne peut dépasser 256 BYTES
    Par valoji dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/10/2005, 08h57

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