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

Windows Forms Discussion :

Ajout enregistrement datatable


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Ajout enregistrement datatable
    Bonjour,
    Voici mon problème:
    Je voudrais créer un nouvel enregistrement dans ma datable.
    La méthode suivante fonctionne partiellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    Dim row as datarow
                    row = ds.Tables("T_chant").NewRow
                    ds.Tables("T_chant").Rows.Add(row)
     
                    chant_databinding.MoveLast()
    En effet mon dataset "ds" se remplit à partir d'une table ("T_chant") qui contient un champ clé primaire "Ref"
    Or lors de l'ajout d'une nouvelle ligne, le champ clé primaire est vide.

    De même avec ma table enfant "T_Paroles", lorsque j'ajoute un enregistrement grâce au bouton prévu à cet effet sur le bindingnavigator, le champ clé primaire de cette table est également vide. De plus, la table T_chant et T_paroles sont liées par le champ "Ref" (T_chant) = "n°" (T_Paroles)
    Or lors de l'ajout d'un enregistrement dans la table T_paroles, le champ "n°" ne se remplit pas automatiquement avec le même numéro que le champ "ref" de T_chant.

    J'espère que vous comprendrez et pourrez m'aider !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Si j'ai bien compris, ta clef primaire est une valeur auto-incrémentée ?

    Dans ce cas, il faut que tu regardes bien dans ton DataSet que ce champ est correctement configuré. De plus, c'est ta base de données qui va attribuer la valeur, donc tu dois rafraichir ton DataSet après l'insertion de ta ligne pour récupérer la valeur attribuée.

    Le clefs auto-incrémentées ne sont pas facile à gérer. Je te conseille le PDF suivant http://dotnet.developpez.com/cours/ado.net/

    Bon courage !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci de la réponse.
    J'ai réussi à avoir qqchose de +- correct
    Sur click du bouton ajouter, je mets le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    chant_databinding.AddNew()
                    chant_databinding.MoveLast()
     
                    Paroles_databinding.AddNew()
                    Paroles_databinding.MoveLast()
    Sur click du bouton enregistrer, je mets le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                chant_databinding.EndEdit()
                Paroles_databinding.EndEdit()
     
                cmdBuilder = New OleDbCommandBuilder(da_chant)
                da_chant.Update(ds, "T_chant")
                ds.Clear()
                da_chant.Fill(ds, "T_chant")
     
                cmdBuilder = New OleDbCommandBuilder(da_paroles)
                da_paroles.Update(ds, "T_paroles")
                ds.Clear()
                da_paroles.Fill(ds, "T_Paroles")
    Pour la table parent T_Chant, cela fonctionne sans problème, l'update se fait correctement.
    Mais pour la table enfant T_paroles, j'ai une erreur de contrainte:
    "System.Data.ConstraintException: Impossible d'activer les contraintes. Une ou plusieurs lignes contiennent des valeurs qui violent les contraintes de type non null, unique ou de clé externe.
    à System.Data.DataSet.EnableConstraints()
    à System.Data.DataSet.set_EnforceConstraints(Boolean value)
    à System.Data.DataTable.EndLoadData()
    à System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
    à System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
    à System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    à System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    à System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
    à VisioSong.Form1.Enregistrer_Click(Object sender, EventArgs e) dans F:\Mes Documents\Visual Studio 2012\Projects\VisioSong - Copie\VisioSong\Form1.vb:ligne 213"

    Et plus spécifiquement, en récupérant le datarow.rowerror:
    "ForeignKeyConstraint relation a besoin des valeurs de clé enfant (1) dans la table parente."

    Dès lors, comment faire un UPDATE correct sur deux tables liées???

    En attendant, je vais regarder le lien que vous m'avez mis ! ^^

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    PS: je n'arrive pas à télécharger le cours: "310 login incorrect"
    Pourtant j'utilise mon nom d'utilisateur et mot de passe.
    Pq ça ne va pas???

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'ai réussi à faire ce code et cette fois il n'y a plus d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                chant_databinding.EndEdit()
                Paroles_databinding.EndEdit()
     
                Dim cb_chant As New OleDbCommandBuilder(da_chant)
                Dim cb_paroles As New OleDbCommandBuilder(da_paroles)
                da_chant.Update(ds, "T_chant")
                da_paroles.Update(ds, "T_paroles")
     
                ds.Clear()
                da_chant.Fill(ds, "T_chant")
                da_paroles.Fill(ds, "T_Paroles")
    Mais la table enfant "T_paroles" ne se remplit pas correctement !
    Après l'update, il n'y a que le champ clef primaire remplit !

    QQn a une solution??

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2006, 18h59
  2. [D7] Ajout enregistrement avec composant Interbase
    Par jer64 dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/02/2006, 22h49
  3. Ajout enregistrement
    Par jarodc dans le forum Access
    Réponses: 1
    Dernier message: 14/11/2005, 23h50
  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. [VB6] [ADO] Pb ajout enregistrement table liée
    Par fikou dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/10/2002, 11h49

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