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

 Delphi Discussion :

Variable STRING de plus de 255 caractères


Sujet :

Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Variable STRING de plus de 255 caractères
    bonjour

    j'ai vu plusieurs sujet traiter de ce problème, sans vraiment avoir de solutions concrètes :

    https://www.developpez.net/forums/d5...55-caracteres/

    https://www.developpez.net/forums/d1...line-too-long/

    dans mon cas c'est pour faire une requête php

    j'ai fait plusieurs tests, et il y a une chose que je ne comprends pas

    imaginons que c'est le contenu d'un Memo que j'envoie dans ma requête GET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Memo1.Text:='Ceci est un texte vraiment long qui ne tiens par sur une ligne,' 
               +' mais quelle idée aussi de saisir un texte comme cela alors que ' 
               +'la ligne ne tiens même pas dans l''éditeur et qu''il faut ' 
               +'utiliser les barres de défilement horizontales pour le lire ' 
               +'en entier ! Non mais bon sang de bon soir !';
    ainsi ça fonctionne, sans problème

    mais si je prends le contenu du texte et je le met dans le memo et bien ça ne fonctionne pas

    que se passe t il lorsque l'on met le texte dans le memo de part le code ? il y a t il une conversion ou autre chose à faire au Memo avant l'envoie de ma requête ?

    j'espère enfin trouver le problème grâce à votre aide

    merci

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    je n'ai pas compris la question :

    si je prends le contenu du texte et je le met dans le memo et bien ça ne fonctionne pas
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je n'ai pas compris la question :
    ce que j'essaie d'expliquer, c'est :

    - lorsque le texte est ajouté au Memo par le code que j'ai cité, la requête Get fonctionne, je n'ai pas de problème de chaîne trop longue

    - si je compile, et je copie (ou j'écris) le même contenu dans le Memo, alors il y a un message d'erreur lors de la requête

    pourquoi dans le code, avec concaténation, ça fonctionne ?

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    bon là je suis perdu !

    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
    16
    17
    18
    19
    20
    21
    22
     
    g : string;
     
    g1 :='Ceci est un texte vraiment long qui ne tiens par sur une ligne,'
               +' mais quelle idée aussi de saisir un texte comme cela alors que '
               +'la ligne ne tiens même pas dans l''éditeur et qu''il faut '
               +'utiliser les barres de défilement horizontales pour le lire '
               +'en entier ! Non mais bon sang de bon soir !'
               +'2 mais quelle idée aussi de saisir un texte comme cela alors que '
               +'la ligne ne tiens même pas dans l''éditeur et qu''il faut '
               +'utiliser les barres de défilement horizontales pour le lire '
               +'en entier ! Non mais bon sang de bon soir !';
     
    g2 := 'testtttttttttttttttttt ttttttttttttttttttttttttt tttttttttttttttttt tttttttttttttttttttt'
       + 'tttttttttttttttttttt ttttttttttttttttttttttttttt tttttttttttttttttt ttttttttttttttttttttt'
       + 'tttttttttttt ttttttttttttt ttttttttttttttttttttttttt ttttttttttttt tttttttttttttttttttttttt'
       + 'tttttttttttttttttt tttttttttttttttttttttttt';
     
     
    idhttp1.Get('http://mon_site/script.php?var=' + g1);
     
    idhttp1.Get('http://mon_site/script.php?var=' + g2);
    pour g1 ça fonctionne, alors que pour g2 non

    pourtant g1 est plus long que g2 ... je ne comprends plus rien :/

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Si j'ai bien compris la question, le problème vient du fait que l'éditeur de code dans Delphi est limité à 255 caractères par lignes.
    Si tu alimentes ta variable de string de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s := 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...';
    Imaginons que cette ligne dépasse 255 caractères, le compilateur sortira une erreur. Il faut revenir à la ligne régulièrement. Bien évidemment, une variable de type string peut contenir bien plus que 255 caractères.
    Si c'est bien cela le problème, je pense que votre manière de constituer la requête est à revoir... Tout mettre en "dur" dans le programme ce n'est pas très flexible pour l'avenir (si votre requête change, vous êtes obligés de modifier et recompiler le programme...).
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Nos messages se sont croisés.
    En plus vous mettez des espaces dans vos urls.... sans faire de URLEncode....
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    dsl gbegreg, je n'ai pas mis tout le code pour garder l'essentiel
    il y a bien URLEncode();

    au début aussi je pensais que c'était la façon d'alimenter ma variable qui posait problème, mais regarde bien mon code, j'alimente g1 et g2 de la même façon, pourtant g1 fonctionne, g2 non (alors que g1 est plus long que g2 ce qui pour moi n'est pas très logique)

    autre solution essayée : à la compilation, on ne peut pas mettre plus de 255 dans un string, j'ai donc essayé de mettre ma chaine dans un Tedit, et d'affecter (mon_string := edit.text) on n'a pas de problème pour l'affectation non plus, mais lorsque je lance la requête ça plante aussi

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    alors on reprend,

    seules les ShortString, ou les string[x] ont une taille limitée à 255 (ou "x") caractères ANSI. Le type "string" est limité à 2Go

    par contre il y a des tas de raisons pour lesquels une chaîne puisse ne pas passer dans une URL, notamment si la chaîne contient les caractères ? ou #

    pour comprendre ce qu'il se passe je te propose de faire ceci:

    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
    16
    17
     
    var
      s: string;
    begin
    // au lieu de faire
    //  idhttp1.Get('http://mon_site/script.php?var=' + g1);
     
    // tu plates ton URL dans un string
      s := 'http://mon_site/script.php?var=' + g1;
     
    // tu affiches la string (sur une console pour pouvoir faire un copier/coller facilement)
      AllocConsole;
      WriteLn(s);
     
    // et là tu lances ta requête pour constater qu'elle foire
      idhttp1.Get(s);
    end;
    et à mon avis la valeur de s ne sera pas correctement encodée pour une URL

    Par ailleurs, la taille maximum d'une URL est "variable" et dépend du serveur...mais pour les informations trop conséquentes il est recommandé de passer par un POST.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    salut

    j'ai essayé ton code, j'ai le même message d'erreur

    la console affiche le contenu de g1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
    exactement ce qui était dans mon Tedit (je rappelle que je suis obligé dans ce code-exemple de passer ma chaîne d'abord dans un Tedit avant de l’affecter à g1 puisque ce n'est pas possible dans l'IDE)

    pour le moment, je ne compte pas dépasser les 300-400 caractères, mais j'ai déjà essayé de faire un POST au lieu du GET et j'ai le même message d'erreur

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Yop !

    Citation Envoyé par Coussati Voir le message
    j'ai essayé ton code, j'ai le même message d'erreur

    Hum…
    Depuis le début il est question de message d'erreur (ou "ça ne fonctionne pas" ou "ça plante aussi", qui ne sont pas des messages d'erreur valides) sans qu'on l'ait jamais vu, et donc sans qu'on sache ce qu'il contient…
    Ça éclaircirait peut-être la discussion.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    le message d'erreur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de socket # 10054
    et bien sur la chaîne n'est pas envoyé sur mon script php

Discussions similaires

  1. String avec plus de 255 caractères
    Par draco951 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/02/2016, 08h30
  2. Avoir plus de 255 caractères pour un lien hypertexte
    Par alexandrebergercyr dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 14/02/2007, 21h27
  3. Réponses: 4
    Dernier message: 22/05/2006, 11h53
  4. Plus de 255 caractères
    Par krfa1 dans le forum Access
    Réponses: 7
    Dernier message: 13/03/2006, 17h01
  5. SQL de plus de 255 caractères dans un recordset
    Par acama dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 05/01/2006, 15h50

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