Update sur tables liées

edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - 24 févr. 2014 à 13:18
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - 20 mars 2014 à 09:20
Bonjour,
Je n'arrive pas à update deux tables liées.
J'utilise un dataset:
Dimensionnement des variables:
    Dim con As New OleDbConnection
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim da_chant, da_paroles As New OleDbDataAdapter
    Dim dt As New DataTable
    Dim ds As New DataSet
    Dim Chant_BindingSource As New BindingSource
    Dim Paroles_BindingSource As New BindingSource


Voici mon code de départ:
           If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\Chants.mdb") Then
                con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source =" & My.Application.Info.DirectoryPath & "\Chants.mdb"
            Else
                MsgBox("Connection à chants.mdb impossible !" & Chr(13) & "Fichier introuvable à l'emplacement:" & Chr(13) & My.Application.Info.DirectoryPath, MsgBoxStyle.Critical)
            End If

            Dim sql_chant As String
            Dim sql_paroles As String

            sql_chant = "SELECT * FROM T_Chant"

            cmd = New OleDbCommand(sql_chant, con)
            cmd.Connection.Open()
            da_chant.SelectCommand = cmd
            da_chant.Fill(ds, "T_Chant")

            sql_paroles = "SELECT * FROM T_Paroles"
            cmd = New OleDbCommand(sql_paroles, con)
            da_paroles.SelectCommand = cmd
            da_paroles.Fill(ds, "T_Paroles")
            cmd.Connection.Close()

            Dim relation As DataRelation
            Dim T_ChantColumn As DataColumn
            Dim T_ParolesColumn As DataColumn

            T_ChantColumn = ds.Tables("T_chant").Columns("ref")
            T_ParolesColumn = ds.Tables("T_Paroles").Columns("n°")

            relation = New DataRelation("relation", T_ChantColumn, T_ParolesColumn)

            ds.Relations.Add(relation)

            Chant_BindingSource.DataSource = ds
            Chant_BindingSource.DataMember = "T_chant"

            Paroles_BindingSource.DataSource = Chant_BindingSource
            Paroles_BindingSource.DataMember = "relation"


Mon code lors de l'ajout d'un nouvel enregistrement:
             Dim titre As String = InputBox("Titre du chant:", "Titre")
            If titre = "" Then
                Mode_Lecture()
            Else

                Chant_BindingSource.AddNew()
                TextBox_Titre.Text = titre
                Paroles_BindingSource.MoveLast()

            End If


Et mon code d'enregistrement:

            Chant_BindingSource.EndEdit()
            Paroles_BindingSource.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")


Ce code fonctionne partiellement. Les enregistrements sont bien dans la table, mais ne sont pas liées.
Ainsi, lors d'un ajout, les clés primaires dans le dataset sont vides. De plus le champ "n°" sur lequel j'ai fait la liaison ne se remplit pas !
Lors de la visualisation, je peux voir le nouvel enregistrement mais pas les enregistrements enfants liés puisque le champ "n°" est vide !

Aidez moi SVP, je galère sur ceci depuis plusieurs mois sans trouver de solution !!!

Merci !

1 réponse

edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
20 mars 2014 à 09:20
Merci pour les nombreuses réponses !
0
Rejoignez-nous