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

VB.NET Discussion :

Pb pour parcourir une base de données


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Pb pour parcourir une base de données
    Bonjour, je souhaite convertir une base de données Access en fichier Xml.
    L'idée de générer un fichier Xml par table présente dans la base de données.
    J'ai donc une fonction qui à une DataTable en paramètre et qui est censée parcourir chaque ligne de la table. Le problème est que je n'arrive pas à entrer dans ma boucle For Each.

    voici mon code pour l'instant :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Public Function createXml(ByVal maTable As DataTable)
            ' création du fichier
            Dim FileXML As New System.IO.StreamWriter(My.Settings.RepSortie & "\" & maTable.TableName & ".xml", False, System.Text.Encoding.UTF8)
            ' déclaration du fichier xml
            Dim XmlDoc As Xml.XmlDocument = New Xml.XmlDocument()
            ' création du document
            XmlDoc.LoadXml("<" & maTable.TableName.ToString & ">" & "</" & maTable.TableName.ToString & ">")
            Dim nbColonne As Integer = maTable.Columns.Count
     
            Dim uneLigne As DataRow
            Dim mesLignes As DataRowCollection
            mesLignes = maTable.Rows
     
            ' !!!!!!!! le problème c'est ici !!!!!!!!!!!
            For Each uneLigne In mesLignes
                ' ElemRef pour le noeud [Ref][/Ref]
                Dim elemRef As Xml.XmlElement
                elemRef = XmlDoc.CreateElement(uneLigne(0).ToString)
     
                Dim elem(nbColonne) As Xml.XmlElement
                For i As Integer = 1 To (nbColonne - 1)
                    elem(i) = XmlDoc.CreateElement(uneLigne(i).ToString)
                    elemRef.AppendChild(elem(i))
                Next
                XmlDoc.DocumentElement.AppendChild(elemRef)
            Next
     
            'Enregistrement du fichier Xml
            XmlDoc.Save(Application.StartupPath & maTable.TableName & ".XML")
            MsgBox("Enregistrement réussi pour la table " & maTable.TableName)
     
            Return FileXML
        End Function
    J'obtiens bien des fichiers Xml mais vides...
    Quelqu'un voit où est le problème ?

  2. #2
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    UneLigne n'est pas un tableau... Il n'y a pas d'erreur à la ligne19 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                elemRef = XmlDoc.CreateElement(uneLigne(0).ToString)
    N'est-ce pas uneLigne.Item(0) ?

    D'autre part, pourquoi ne pas laisser la méthode DataTable.WriteXML() faire tout le travail ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    elemRef = XmlDoc.CreateElement(uneLigne(0).ToString)
    cette ligne est censée me donner la valeur qui est dans la première colonne de la ligne (je me trompe peut être).
    Et j'ai déjà fait un script avec DataTable.WriteXML mais je n'obtiens pas la structure que j'aimerais avoir.
    En fait chaque ligne contient des infos sur une référence produit, et la référence est donnée dans la première case de la ligne; j'aimerais donc que les infos d'une référence soient dans une balise qui porte le nom de la référence (d'où la ligne citée plus haut)

  4. #4
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Effectivement ça doit vous donner le premier élément de la datarow. Je ne savais pas qu'on pouvais s'affranchir de passer par "Item()", mais une petite vérification dans la doc me le confirme. On en apprend tout les jours...

    Vous avez essayé de placer des points d'arrêt pour vérifier le contenu de vos différentes variables, ainsi que l'entrée effective dans la boucle for...each ? Parce que sur le principe, je ne vois pas d'erreur flagrante...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    En mettant un point d'arrêt à l'entrée de la boucle, je vois la mention "Nothing" pour la variable "uneLigne", et je ne comprends pourquoi je n'obtiens rien... Je tourne en rond sur les forums sans rien trouver. Je retrouve cette syntaxe mais, dans mon cas, elle ne marche pas.
    Je pense que l'erreur viens d'ailleurs (au niveau de "maTable" probablement) je vais continuer à chercher^^

  6. #6
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Lors de l'exécution pas à pas, au niveau du point d'arrêt, un survol avec la souris de la variable matable devrait vous permettre de voir l'allure de votre table, et de constater si les lignes et les colonnes sont correctement remplies.

    EDIT : En mode pas à pas, la collection mesLignes est-elle vide ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    En effet "mesLignes" est vide, et j'ai l'impression que dans "maTable" il n'y a que la structure de la table sans les données...
    Je devrais pouvoir régler ce pb ce soir.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    674
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 674
    Points : 1 176
    Points
    1 176
    Par défaut
    Bonsoir
    il y a un manque d'antislash au niveau de la sauvegarde dans le fichier.
    A corriger comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            'Enregistrement du fichier Xml
            XmlDoc.Save(Application.StartupPath & "\" & maTable.TableName & ".XML")

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Le "\" n'est visiblement pas obligatoire.
    Et le problème venait bien du fait que ma table n'avait que la structure de la table voulue mais pas les données à l'intérieur.
    Merci encore pour vos réponses

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/03/2007, 10h36
  2. Réponses: 3
    Dernier message: 05/10/2006, 17h15
  3. [Conception] Creation d'une appli pour consulter une base de données
    Par nico.elgringo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/07/2006, 11h58
  4. Réponses: 8
    Dernier message: 23/03/2005, 19h28
  5. aide pour exporter une base de donnée
    Par matt55 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 06/04/2004, 14h28

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