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

Accès aux données Discussion :

[VB.Net] Comment copier une DataRow d'une table vers une autre ?


Sujet :

Accès aux données

  1. #1
    YLF
    YLF est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut [VB.Net] Comment copier une DataRow d'une table vers une autre ?
    Bonjour à tous,
    mon problème est le suivant :
    Suite l'utilisation de l'objet Select sur la table d'une dataset,j'obtiens une array de datarow.
    J'aimerais pouvoir copier chacune de ces datarow dans une autre table dans le but de réutiliser l'objet select sur cette nouvelle table.
    Dans un premier temps,j'ai essayé d'insérer les row en utilisant DS.Table("NewTable").Add(DataRow)
    mais le message d'erreur suivant apparait "This row already belongs to another table". Ce problème s'explique surement par le fait que les rows pointent sur la table initiale.
    Dans un second temps,j'ai tenté de copier l'array de DataRow mais le même problème apparait.
    Enfin j'aurais aimé faire une copie directe des row mais je n'y suis pas parvenu..
    Alors si vous avez des idées...Merci d'avance
    ++

  2. #2
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    la logique pour copier les datarow me parait correcte !!
    Est ce que tu peux nous mettre tous le code que tu utilises pour copier les datarow ?
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  3. #3
    YLF
    YLF est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Code utilisé
    Voici le code qui réalise la copie de l' Array
    j'ai laissé le code utilisé pour les autres méthodes
    j'espère que ce seras suffisament lisible...

    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
     
    Dim ArraySize As Integer
    Dim TestName As String
    For i = 1 To NumberOfTable
     DS.Tables.Add(TablesArray(0, i - 1) & "_Bis")
     'DS.Tables.AddRange(TablesArray(4, (i - 1)))
     TestName = TablesArray(0, i - 1) & "_Bis"
     ArraySize = TablesArray(4, i - 1).Length
     Dim TempArray(ArraySize) As Object
     Array.Copy(TablesArray(4, (i - 1)), TempArray, TablesArray(4, (i -
     1)).Length)
     'TempArray = TablesArray(4, (i - 1))
     'For Each Row In TablesArray(4, (i - 1))
     For Each Row In TempArray
         Dim RowBis As Data.DataRow
         'RowBis = Row.Copy
         DS.Tables(TestName).Rows.Add(Row)
     Next
    Next i

  4. #4
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    je n'ai pas trés bien compris le code et ta question !!
    si j'ai bien compris, tu as une collection de Row issue d'une commande Select dans un DataSet, tu veux copier le résultat de ce Select dans une DataTable !!

    Pour moi, cela mérite 3 lignes de codes !! soit MyArrayRow ta collection de Row récupéré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Dim DT As New DataTable
            For Each DR As DataRow In MyArrayRow
                DT.Rows.Add(DR)
            Next
    mais bon on est en fin de journée, c'est peut être moi
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  5. #5
    YLF
    YLF est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    les Array Contenant les datarow sont définis ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TablesArray(4, i) = DS.Tables(TablesArray(0, i)).Select(CurrentFilter)
    Et j'ai testé le code conseillé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To NumberOfTable
                    Dim DT As New DataTable
                    For Each DR As DataRow In TablesArray(4, i - 1)
                        DT.Rows.Add(DR)
                    Next
                Next
    Le message d'erreur suivant apparait :


    An unhandled exception of type 'System.ArgumentException' occurred in system.data.dll

    Additional information: This row already belongs to another table.

    je ne sais pas où est l'erreur.
    Et désolé si je suis confu

  6. #6
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    J'avais eut ce genre de problème, ou il me fallait copier quelques lignes d'une table vers une autre, qui devait avoir la même structure.
    Essaye une copie item par item de chacune des DataRow de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
                    BonsATraiter = SourceEtat.Bon.Clone()
                    For Each Ligne In SourceEtat.Bon.Rows
                        NouvelleLigne = BonsATraiter.NewBonRow
                        'copie de chaque élément
                        For I = 0 To SourceEtat.Bon.Columns.Count() - 1
                            NouvelleLigne.Item(I) = Ligne.Item(I)
                        Next I
                        BonsATraiter.Rows.Add(NouvelleLigne)
                    Next
    SourceEtat.Bon est ma table source,
    BonsATraiter est ma DataTable de destination,
    En gros je créé une nouvelle ligne avec NewRow pour avoir le bon format de ligne (NewBonRow pour moi à cause d'un dataset typé ; mais le principe général y est), ensuite je rempli item par item, puis j'ajoute à ma table destination la nouvelle ligne remplie par un Rows.Add().
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

  7. #7
    YLF
    YLF est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    La copie Item par Item marche très bien.
    Merci pour cette aide
    ++

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Je confirme que pour la copie d'une datarow d'une dataSource vers une table cible, il faut passez par un Clone de l'objet Datatable sur un nouvelle objet et ensuite faire la copie item par item dans une nouvelle row de la table cible !
    - Item par item car cela évite tout problème si les structures de dataSource <> dataCible
    - Clone sur un nouvelle object tout simplement car de cette manière cela créer une copie complètement indépendante.
    Essayé seulement la copie item par item, la copie va se faire mais si vous décidez de supprimer en suite la dataSouce (la ligne row) par l'instruction sur l'objet .delete, vous aurez un beau message qui indiquera que cette action ne peut être faite car cette ligne appartient à une autre table.

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

Discussions similaires

  1. [MySQL] href d'une donnée de ma table vers une autre donnée de ma table
    Par <-mini-> dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/06/2008, 09h00
  2. Réponses: 12
    Dernier message: 09/06/2008, 17h54
  3. Réponses: 16
    Dernier message: 20/10/2007, 00h24
  4. Réponses: 3
    Dernier message: 24/04/2006, 15h53
  5. [MySQL] Copier 1 champ d'1 table vers une autre.
    Par cisse18 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/04/2006, 09h50

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