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 :

Probleme de lecture d'un fichier XML


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut Probleme de lecture d'un fichier XML
    Bonjour a tous,

    J'ai un petit souci avec mon application:
    En fait j'ai un fichier XML (ou figure bon nombre d'information) et de temps en temps la lecture de ce fichier occasione des Violation d'acces?

    Sur des passages a priori sans risques :
    Voici par exemple la derniere fonction qui a engendré une violation d'acces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function Get_Nom: WideString;
    begin
     try
      Result := AttributeNodes['nom'].Text;
     except
      Result := '';
     end;
    end;
    malgré le try except j'ai réussi à avoir une violation d'acces pas mal non?

    Merci beaucoup

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Tu dois avoir la notification d'exception du débuggueur, non ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Il me semble que le mieux pour eviter les violations d'accès, est de verifier s'il y a quelque chose derrière le pointeur... par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Tform1.Get_Nom(Noeud : IXMLNode) : WideString;
    begin
      try
        if assigned(noeud.AttributeNodes['nom']) then
          Result := noeud.AttributeNodes['nom'].Text
        else
          result := '';
      except
        Result := '';
      end;
    end;
    Dis moi si ca solutionne le problème
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    pardon mais c'est une notification d'exception du débugueur?
    En fait ca arrive occasionnelement du coup lorsque je lance mon application en mode débug j'arrive pas à générer la VA, par contre j'ai utilisé un composant qui me renvoie :
    le rapport de l'erreur
    l'état de la pile
    les informations générales du PC
    et bien sur l'endroit ou se produit l'erreur.
    Du coup si la question est: quel est le message de l'erreur ? La réponse est:
    Violation d'accès à l'adresse 004F47BA dans le module MonApplication Lecture de l'adresse 0000001C
    Si c'est pas ca la question désolé mais vu les informations dont je dispose je peux quasiment tout vous dire sur cette erreur

    Merci beaucoup

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Ok merci beaucoup noisette je vais essayer par contre je ne serais pas en mesure de dire si ca marche tout de suite etant donné que ca me génére l'erreur de temps en temps.

    J'aurais aimé savoir le try except n'aurais pas du relevé la Violation d'acces?

  6. #6
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    j'ai constaté que non, mais c'est empirique, je ne peux pas te donner de reponse plus precise.

    Ce qui est sur, c'est que dès que tu utilise des nodes (TreeView, XML etc etc) il vaut mieux abuser de "if assigned", ca evite beaucoup de problème !

    Pour ton cas, le problème ne viens pas du faut que tu veilles recupérer le text de ton Node, mais que ce même Node n'existe pas probablement. Du coup, tu essaye d'atteindre une propriété d'un objet inexistant, ce qui créé la violation d'accès, l'exeption elle, serait renvoyée s'il y avait un problème lors de l'execution de la propriété .text

    Voilà ce que j'ai compris... Si c'est faux, n'hésitez pas à me reprendre !
    A+
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Personellemnt j'utilise le code suivant pour lire les String d'un IXMLNode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function XMLStringValue(node: IXMLNode; const Default: string = ''): string;
    begin
      Result := Default;
      if Assigned(node) then
        if node.NodeValue <> Null then
          Result := node.NodeValue;
    end;
    Lire NodeValue provoque un plantage sans message si NodeValue est null.

    Naturellement c'est valable pour tous les type.

  8. #8
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    C'est vrai, j'avais oublié de parler de Null ! Perso, j'utilise "if not VarisNull(node.NodeValue)" mais, ca reviens au même !
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 109
    Points : 71
    Points
    71
    Par défaut
    Ok merci beaucoup pour ton aide!

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

Discussions similaires

  1. Probleme de lecture d'un fichier xml (WP7)
    Par yassineonline dans le forum Windows Phone
    Réponses: 3
    Dernier message: 24/07/2011, 22h19
  2. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  3. [C#] Probleme d'écriture dans un fichier XML
    Par Joad dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/05/2005, 16h19
  4. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/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