none
Vb.Net Prob. Enregistrement Base de données avec Mise à jour hiérarchique RRS feed

  • Question

  •  

    Mon problème concerne l’enregistrement avec mise à jour hiérarchique de ma base de données lorsque que j’utilise des champs « NumeroAuto » à l’intérieur de mes tables.

    Mes deux tables :

    Table_Parent
    Parent_Num : Numéro Auto incrémentation / Clé primaire
    Parent_Nom : Texte (Nom du parent)

    Table_Enfant
    Enfant_Num : Numéro Auto incrémentation / Clé primaire
    Parent_Num : Numéro du parent
    Enfant_Nom : Texte (Nom de l’enfant)

    Je crée une relation entre mes deux tables via le champ « Parent_Num » avec mise à jour et effacement en cascade. Type de relation : Un à plusieurs (Un parent pour plusieurs enfants).

    Ma situation :

    Dans mon programme, je crée un nouvel enregistrement Parent. Le nouvel enregistrement se voit attribuer provisoirement, avant enregistrement, le numéro -1 (Parent_Num = -1) / Puis -2, -3, etc. si je crée d’autres Parents.

    Parent_Num / Parent_Nom 
    -1 / Rémi

    Une fois mon Parent (-1) créé, je crée immédiatement trois enregistrements Enfant, qui a leurs tours se voient attribuer des numéros provisoires, avant enregistrement :

    Enfant_Num / Parent_Num /  Enfant_Nom 
    -1 / -1 / Marc
    -2 / -1 / Sophie
    -3 / -1 / Paul

    Mon problème

    Je n’arrive pas à enregistrer ces données en l’état via les commandes traditionnelles TableAdapter .Update ou TableAdapterManager.UpdateAll.

    Dans les deux cas, la commande refuse d’enregistrer la Table_Enfant car cette dernière fait référence à un Parent (Parent_Num) qui ne dispose pas encore de numéro (Ici -1).

    Message d’erreur : Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table 'Table_Parent'.

    VB.NET

    Dans mon formulaire, je crée en premier mon DataSet « MonDataSet ».

    Puis deux BindingSource et leurs TableAdaptateur :

    Parent_BindingSource >>> Parent_TableAdaptateur
    Enfant_BindingSource >>> Enfant_TableAdaptateur

    Parent_BindingSource ayant comme DataSource : MonDataSet / DataMenbre : TableParent
    Et
    Enfant_BindingSource ayant comme DataSource : Parent_BindingSource / DateMenbre : Table_ParentTable_Enfant

    Pour visualiser et manipuler le tout, je crée deux tableaux DataGridView dans mon formulaire :

    Parent_DataGridView  (DataSource : Parent_BindingSource)
    Enfant_DataGridView (DataSource : Enfant_BindingSource)

    A l’ouverture de mon formulaire je n’oublie pas de charger les données :

    Private Sub Form1_Load() Handles MyBase.Load
            Me.Enfant_TableAdapter.Fill(Me.MonDataSet.Table_Enfant)
            Me.Parent_TableAdapter.Fill(Me.MonDataSet.Table_Parent)
    End Sub
    

    Tentative N°01 : Sauvegarder via mes TableAdapter


    Private Sub Bouton_Click() Handles MonBouton_01.Click
    
            Me.Validate()
    
            Parent_BindingSource.EndEdit()
            Enfant_BindingSource.EndEdit()
    
            Parent_TableAdapter.Update(MonDataSet.Table_Parent)
            Enfant_TableAdapter.Update(MonDataSet.Table_Enfant)
    
    	'>>> Erreur
    
    End Sub
    

    Tentative N°02 : Sauvegarder via un TableAdaptaterManager

    Je crée un TableAdaptaterManager.
    Note : Il se crée automatiquement lorsque l’on dépose une table depuis la fenêtre source de données sur le formulaire.

    MonTableAdaptaterManager.Table_EnfantTableAdaptater : Enfant_TableAdapter
    MonTableAdaptaterManager.Table_ParentTableAdaptater : Parent_TableAdapter

    Private Sub Bouton_Click() Handles MonBouton_02.Click
    
            Me.Validate()
    
            Parent_BindingSource.EndEdit()
            Enfant_BindingSource.EndEdit()
    
            MonTableAdapterManager.UpdateAll(MonDataSet)
    
    	'>>> Erreur
    
    End Sub
    
    Ma Question : 

    Comment faire pour enregistrer simultanément les deux tables dans l’exemple cité : 
    Un nouveau Parent par encore identifié (Parent_Num : -1) qui dispose déjà d’un ou plusieurs nouveaux Enfants.

    Ps : J’ai très longuement consulté et suivi à la lettre l’ensemble de l’aide fourni concernant la « Mise à jour hiérarchique » sans réussir à trouver une solution à mon problème.

    https://msdn.microsoft.com/fr-fr/library/bb384468.aspx

    Merci 

    dimanche 1 janvier 2017 02:22

Réponses