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 :

Procédure : passage d'une string : erreur !


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Procédure : passage d'une string : erreur !
    Bonjour

    J ai cree une petite procedure qui a pour but de sauvegarder sur c une page aspiree sur le net mais elle me provoque exeption EAccesViolation.
    il s agit de la procedure suivante que j appelle avec : SaveUrl(url2); (url2 etant correctement affichee dans un memo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure SaveUrl (url2:string);
    var
      F: TextFile;
      PageAspiree : string;
      IdHTTP3: TIdHTTP;
    begin
      PageAspiree := idhttp3.Get(url2);
      AssignFile(F, 'c:\turf\avecprocedure.txt');
      Rewrite(F);
      WriteLN(F, PageAspiree);
      CloseFile(F);                     
    end;
    apres avoir enleve progressivement les lignes j imagine que le pb provient du fait que url2 est vide car il m est impossible de l afficher dans un memo dans cette procedure...

    meri de votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Slt

    je pense que le soucis est au niveau de l'écriture de document web ds ton fichier .txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WriteLN(F, PageAspiree);
    essaie pour commencer d'écrire ds ton fichier .txt la valeur de ta variable "url2:string"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure SaveUrl (url2:string);
    var
      F: TextFile;
      PageAspiree : string;
      IdHTTP3: TIdHTTP;
    begin
      PageAspiree := idhttp3.Get(url2);
      AssignFile(F, 'c:\turf\avecprocedure.txt');
      Rewrite(F);
      WriteLN(F, url2);
      CloseFile(F);                     
    end;
    si tu obtiens le lien url, c'est que le soucis vient de la récupération des valeurs du site

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    merci de ton aide
    effectivement le pb provient de la recup du fichier car avec ta manip l url est bien enregistree dans le fichier...

    ailleurs dans le script j autilise la meme procedure avec un IdHTTP.Get('www.unsite.com'); et cela fonctionne parfaitement pourtant...


    ben du coup je sais plus du tout...

    Edit : du coup j ai modifié mon code. Je charge la page en variable que je passe a la procedure qui sauvegarde et cela fonctionne parfaitement mais si qqun pouvait m aider à comprendre. Je debute et c est encore un mystere là....
    merci

  4. #4
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Violation d'accès signifie souvent qu'on utilise une référence à un objet qui n'est pas instancié (ou du moins la référence ne pointe pas sur un objet du type attendu).
    Et là, c'est bien le cas.
    Dans ton code, tu déclare bien la référence IdHTTP3 (de type TIdHTTP), mais nul part tu créés une instance (code attendu: IdHTTP3 = TIdHTTP.Create; ).
    Or, tu utilises directement IdHTTP3.Get(); ... et là Délphi n'apprécie pas vraiment.

    Remarque:
    Il est tout à ton honneur (en tant que débutant, ou pas !) de chercher à comprendre pourquoi ça plante, alors que tu as pu faire autrement et éviter le problème.
    Bravo
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ma part je ferais comme cela

    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
     
    procedure SaveUrl (url2:string);
    var
      lst : TStringList;
      IdHTTP3: TIdHTTP;
    begin
      lst := TStringList.Create;
      IdHttp3 := TIdHttp.Create;
      try
        lst.text := idhttp3.Get(url2);
        lst.SaveToFile('c:\turf\avecprocedure.txt');
      finally
        lst.Free;
        IdHttp3.Free;
      end;  
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    merci

    je vais voir ça ce soir la peux pas

    par contre une question a laquelle je ne trouve pas de reponse
    Là ça ne touren pas parceque je n ai pas instancié l objet :ok j ai compris
    par contre dans le 'corps' du code, celui qui appelle cette procedure j utilise le meme objet que je n ai pas non plus instancié et cela fonctionne. Pourqoui ?

    merci

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    Citation Envoyé par sp2308 Voir le message
    par contre une question a laquelle je ne trouve pas de reponse
    Là ça ne touren pas parceque je n ai pas instancié l objet :ok j ai compris
    par contre dans le 'corps' du code, celui qui appelle cette procedure j utilise le meme objet que je n ai pas non plus instancié et cela fonctionne. Pourqoui ?

    merci
    peut être as tu déposé un objet IdHTTP3 sur ton formulaire ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    effectivemennt.... donc le fait de le poser 'l instancie' ??? enfin je crois que tu auras compris ce que je veux dire pke j ai posé deux autre meme composant dont le IdHttp3...

    maintenant la dernier question
    IdHttp3 := TIdHttp.Create me provoque une erreur
    pour etre correct je dois faire IdHttp3 := TIdHttp.Create(application) est ce normal et à quoi est du ce fait ?

    merci à tous

  9. #9
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    effectivemennt.... donc le fait de le poser 'l instancie' ??? enfin je crois que tu auras compris ce que je veux dire pke j ai posé deux autre meme composant dont le IdHttp3...
    en gros oui. tous les composants posés sur ta forme seront automatiquement instanciés au chargement de ta form.

    Citation Envoyé par sp2308 Voir le message
    maintenant la dernier question
    IdHttp3 := TIdHttp.Create me provoque une erreur
    pour etre correct je dois faire IdHttp3 := TIdHttp.Create(application) est ce normal et à quoi est du ce fait ?
    merci à tous
    tu dois savoir qu'un composant instancié doit être détruit après utilisation. le paramètre que tu passe au constructeur Create du TIdHttp est le composant qui se chargera de détruire automatiquement le TIdHttp. je t'invite à te documenter un peu dans l'aide de delphi à ce propos.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    ok merci à tous

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

Discussions similaires

  1. [XL-2007] Passage d'une string en paramètre
    Par kacedda dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/08/2014, 13h55
  2. Réponses: 1
    Dernier message: 05/03/2009, 11h28
  3. Réponses: 4
    Dernier message: 11/04/2007, 12h49
  4. Passage d'une String[] en argument.
    Par Empty_body dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2007, 14h41
  5. Réponses: 15
    Dernier message: 24/01/2006, 16h08

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