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 :

DataTable différent de Dataset.Tables ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut DataTable différent de Dataset.Tables ?
    Bonjour bonjour!

    Voila, j'ai des problèmes de datatable... Voici les cas:

    Ca, ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim d1 as new datatable
    Ajoute_ligne (d1)
     
    Private Sub Ajoute_ligne (ByRef dt as DataTable)
    dt.rows.Add("Salut","Salut")
    End Sub
    Ca marche puisque après l'appel de la procédure, les lignes sont présentent.


    Ca, Ca marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ds as new DataSet
    ds.Tables.Add("d1")
    Ajoute_ligne (ds.Tables("d1"))
    Après l'appel de la procédure, la table est vide.

    ------

    Ca ca marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim dt as new datatable
    dt = DS.Tables(0).Clone
    Ca, Ca marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ds as new dataset
    ds.Add("d1")
    ds.Tables("d1") = DS.Tables(0).Clone
    Ca me souligne la dernière ligne avec l'erreur:
    La propriété Item est ReadOnly.
    Si quelqu'un pouvait m'éclairer... Merci d'avance

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bon et bien j'ai trouver une solution, qui ne me plais pas trop.

    Au lieu d'avoir 8 Datatable dans mon Dataset, j'ai maintenant 8 Datasets.

    Car les passages par references et les clones fonctionnent parfaitement.

    Je laisse ce post encore un peu, si quelqu'un pouvait éclaircir ce sujet.


  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    ici tu passe une chaine de caractère à ton dataset

    met ce code à la place

    je te renvoi à ce post avec un problème semblable

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Quand je faisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ds.Tables.Add("Table1")
    C'était pour créer une table dans le dataset qui s'appelle Table1, puis j'essayais de copier le schema.

    En prenant ta solution, ça sous-entend qu'il faut créer la datatable localement, puis l'ajouter au dataset?

    Genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim ds as new dataset
    dim dt as new datatable
    dt = Me.AutreDataset.Tables(0).Clone
    ds.Tables.Add(dt)
    Parce que je trouvais de l'intérêt a ne pas créer localement toute mes datatables... pour les ajouter une a une... Tout ça juste pour copier le schéma.

    D'aileurs le problème est le même. Même avec cette solution, on ne peut pas créer directement une datatable dans le dataset et copié un clone dedans.

    Mais ca reglerai le problème de clonage en effet.

    Par contre pour le passage par référence reste un problème. Car pour identifié une table dans un dataset il faut soit mettre son nom en String soit son numéro... Et cela ne semble pas marché.

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    la collection tables de l'objet dataset est en lecture seul (readonly)
    tu peut tres bien récupérer ta datatable dans une variable et faire toutes les modifications voulu, la table dans le dataset changera automatiquement

    modifier ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ds as new dataset
    ds.Add("d1")
    ds.Tables("d1") = DS.Tables(0).Clone
    et mettre à la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim ds as new dataset
    dim dt as datatable
    dt=ds.Add("d1")
    dt = DS.Tables(0).Clone
    dt est juste une référence sur la table les changements sur la structure ou sur les données de dt seront en fait repercuté directement sur la table "d1" du dataset

    donc il n'y a pas de problème pour le passage par reference

    pour le clonage des datatable remplacer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ds as new dataset
    ds.Add("d1")
    ds.Tables("d1") = DS.Tables(0).Clone
    par celui là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ds as new dataset
    ds.Tables(DS.Tables(0).Clone())
    mais si tu veut cloner une dataset vers une autre tu pouvait simplement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim ds As DataSet = DSorigine.Clone()
    puis te débarrasser des tables en plus avec la méthode remove de la collection tables

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Merci pour ces astuces !!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/04/2006, 16h36
  2. sélectionner les lignes différentes entre 2 tables
    Par PAYASS59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/09/2005, 14h05
  3. Réponses: 2
    Dernier message: 18/08/2005, 12h42
  4. [C#] Ajout de DataTable dans un DataSet
    Par pc152 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 31/08/2004, 09h22
  5. URGENT - Nombre d'enregistrements différents dans une table
    Par Jeankiki dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/08/2004, 15h51

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