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 :

Récupérer contenu colonne dans un dataset


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Points : 32
    Points
    32
    Par défaut Récupérer contenu colonne dans un dataset
    Bonjour,

    comment est-ce que je peux faire pour récupérer le contenu de la colonne B de la table A dans un dataset, j'ai ceci mais ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim NewDataSet As New DataSet
                DataSource.WriteXml("C:\test.xml", XmlWriteMode.WriteSchema)
                NewDataSet.ReadXml("C:\test.xml")
    NewDataSet.Tables("A").Column("B")

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim column As DataColumn
            Dim row As DataRow
             Dim Value As String
                    column = NewDataSet.Tables("A").Columns("B")
                    Value = row(column).ToString()
    mais il m'indique :

    la reference d'objet n'est pas definie a une instance d un objet

  3. #3
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim column As DataColumn
            Dim row As DataRow
             Dim Value As String
                    column = NewDataSet.Tables("A").Columns("B")
                    Value = row(column).ToString()

    mais il m'indique :
    la reference d'objet n'est pas definie a une instance d un objet
    Cette exception se lance quand on essaie d'utiliser un objet qui n'a pas été instancié (ou qui n'existe pas..). Ici je vois que c'est ta variable 'row' qui n'est jamais instanciée et que tu essaie d'utiliser quand même.

    Je pense que tu ne peux pas récupérer les valeurs de cette façon, ça me parait pas très logique car les données ne sont pas dans les colonnes mais plutôt dans les lignes.
    Il faut récupère toutes les lignes de ta table et pour chacune d'elles tu récupère la valeur de la cellule.
    J’ai des questions à toutes vos réponses!

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    Merci pour la réponse mais si je fais
    n'est pas accessible dans ce contexte car il est 'Protected Friend"

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Tu ne peux pas créer de nouvelle DataRow comme ça.
    Seule ta DataTable peut te fournir une DataRow qui lui correspondra (méthode NewRow je crois).

    De toute façon, ta démarche n'est pas la bonne.
    Inspire toi de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim values As New List(Of Object)    'Liste des valeurs recherchées
    Dim columnIndex As Integer = 2       'Index de la colonne où on va chercher les valeurs
     
    For each row As DataRow In MyDataTable.Rows
        values.Add(row.Item(columnIndex))
    Next
    J’ai des questions à toutes vos réponses!

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup

    Dernière question sur le sujet,

    j'ai une table parent "A" avec une foreign key et je voudrais trouver dans une table enfant "B" la primary key "PrimaryKey" qui est égal à la foreign key et récupérer toutes les valeurs des colonnes correspondant. J'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each row As DataRow In NewDataSet.Tables("B").Rows
      For Each rowBis As DataRow In NewDataSet.Tables("A").ChildRelations("C").ParentForeignKey
        If Tables("B").PrimaryKey = Tables("A").ChildRelations("C").ParentForeignKey
        key.Add(row.Item(PrimaryKey))
        values.Add(row.Item(2))
        End If
      Next
    Next
    Mais ça ne fonctionne pas

  7. #7
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    j'ai une table parent "A" avec une foreign key et je voudrais trouver dans une table enfant "B" la primary key "PrimaryKey" qui est égal à la foreign key et récupérer toutes les valeurs des colonnes correspondant.
    Ca ressemble beaucoup à une requête vers une source de données ton histoire.
    Pour ça, il existe plusieurs manières de procéder, comme Linq to DataSet qui te permettra d'effectuer des opérations sur ta source de données.
    Jettes un coup d’œil sur le msdn et cherche du coté de la méthode Where.

    Et du coup, pour ta première question, tu peux te servir de Linq aussi
    J’ai des questions à toutes vos réponses!

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2012
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    Merci, j'ai plus ou moins trouver une solution

    Si j'ai une table enfant "B" avec plusieurs lignes avec une colonne clè primaire "ID" qui est équivalente à celle de la table parent "B" avec une clé primaire "ID", je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HighValueKey = NewDataSet.Relations(Tag(i)).ChildTable.Rows.Count
                                For Each row As DataRow In NewDataSet.Relations(Tag(i)).ChildTable.Rows
                                    If (NewDataSet.Relations(Tag(i)).ChildTable.PrimaryKey).Equals(NewDataSet.Relations(Tag(i)).ParentTable.PrimaryKey) Then
                                        SaveValueKeyForNext = row.Item(NewDataSet.Relations(Tag(i)).ChildTable.PrimaryKey(0))
                                    End If
                                Next
    HighValueKey = 138

    Sauf que j'ai un petit problème, il ne passe qu'une fois dans la boucle

  9. #9
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut,
    Citation Envoyé par pitite Voir le message
    Si j'ai une table enfant "B" avec plusieurs lignes avec une colonne clè primaire "ID" qui est équivalente à celle de la table parent "B" avec une clé primaire "ID"
    Je suis pas sur d'avoir compris.. J'ai fait un test chez moi pour voir..
    J'ai rempli un DataSet avec une table "Chien" et une table "User", un chien appartenant à un user. J'ai donc une clé primaire "ID" dans la table "Chien" et une clé externe "ID_chien" dans la table user.

    Voici mon code inspiré par le tien:
    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
    35
    36
        Sub test()
     
            'Nouveau DataSet
            Dim ds As New DataSet
            'On récupère la table "User"
            Dim r As New SqlCeDataAdapter("select * from ""User""", Connection.ConnectionString)
            'On rempli le DataSet avec
            r.Fill(ds, "User")
            'On récupère la table "Chien"
            r = New SqlCeDataAdapter("select * from ""Chien""", Connection.ConnectionString)
            'On rempli le DataSet avec
            r.Fill(ds, "Chien")
     
            'On récupère les tables du DataSet
            Dim chiens As DataTable = ds.Tables("Chien")
            Dim users As DataTable = ds.Tables("User")
     
            'On crée la relation
            Dim RelationName = "Chien_user"
            ds.Relations.Add(RelationName, chiens.Columns("ID"), users.Columns("ID_chien"))
            'la table Chien est la ParentTable
            'la table User est la ChildTable
     
            'On crée les clés primaires
            users.PrimaryKey = {users.Columns("ID")}
            chiens.PrimaryKey = {chiens.Columns("ID")}
     
            'Ici débute le code inspiré par le tien..
            Dim value As Object
            For Each userRow As DataRow In users.Rows
                If users.PrimaryKey.Equals(chiens.PrimaryKey) Then   'Ici tu compare des tableaux de DataColumn
                    value = userRow.Item(users.PrimaryKey(0))
                End If
            Next
            'Jusqu'ici..
        End Sub
    Arretez moi si je me trompe mais je crois que ta condition est fausse (cf code).
    Il faudrait à la limite que tu t'inspire de ce bout de code (qui fonctionne):
    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
            'Pour tous les users
            For Each userRow As DataRow In relation.ChildTable.Rows
                Dim id_chien_in_user = userRow.Item(relation.ChildColumns(0)) 'id_chien du user
     
                'Pour tous les chiens
                For Each chienRow As DataRow In relation.ParentTable.Rows
                    Dim id_chien_in_chien = chienRow.Item(relation.ParentColumns(0)) 'id du chien
     
                    If id_chien_in_user.Equals(id_chien_in_chien) Then
                        'On a retrouvé le chien du user!
                        MsgBox(userRow("Nom").ToString + " " + chienRow("Nom").ToString)
                    End If
     
                Next
            Next
    Avec Linq ca donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For Each userRow As DataRow In users.Rows
                Dim id_chien As String = userRow.Item("ID_chien").ToString
                Dim chienRow As DataRow = (From c In chiens Select c Where c.Item("ID") = id_chien).FirstOrDefault
                MsgBox(userRow.Item("Nom") + " " + chienRow.Item("Nom"))
            Next
    C'est déjà moins compliqué non? En plus ça doit demander beaucoup moins de ressources que 2 boucles For imbriqués..
    J’ai des questions à toutes vos réponses!

Discussions similaires

  1. Réponses: 9
    Dernier message: 10/10/2008, 16h39
  2. Réponses: 2
    Dernier message: 22/05/2008, 12h37
  3. Récupérer clé primaire dans un dataset
    Par Agoye dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/11/2007, 11h20
  4. récupérer contenu fichier dans une variable
    Par kalyparker dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2007, 18h10
  5. récupérer la colonne dans un TMemo
    Par krokmitaine dans le forum Delphi
    Réponses: 9
    Dernier message: 04/10/2006, 14h12

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