Comportement bizzard : Les nouveaux enregistrements de la table Enfants sont ign

Résolu
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 13 févr. 2012 à 21:17
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 14 févr. 2012 à 21:23
Bonsoir, j'espère ne pas abuser en demandant une fois de plus de l'aide.

J'ai un Dataset comprenant 2 tables Parents, Enfants. Si j'ajoute simultanément 1 ligne dans la table parents et 1 ou plusieurs lignes dans la table Enfants, seul les lignes de la table parent parviennent à s'enregistrer lors de l'appel de chaque méthode Updates.
En cherchant j'ai localisé le problème mais je n'ai pas trouvé de solution :
Tout d'abord je voudrais préciser que j'enregistre mes 2 tables dans l'ordre (La table Parent puis la table Enfants, Mes 2 tables sont liées par une relation un à plusieurs)
Donc le problème se situe pendant l'exécution de la méthode Update de la table Parents, à ce moment là les lignes Enfants perdent le Statut Added, et comme je fait une sélection des lignes à enregistrer avec le Statut Added, lors de l'appel de la méthode Update pour la table Enfants il n'y a plus rien à enregistrer. (J'espère que je suis clair...)

Plus précisément ces statuts sont perdues soit juste après la méthodes AcceptChanges (voir la procédure ci-après), soit en sortant de la méthode Update si je désactive AcceptChanges.

Comment ce fait t'il que je perdent les Statuts ? Je n'y comprends plus rien. J'ai même essayé de supprimer la relation (aprés avoir ajouter les lignes dans mon Dataset), il n'y a rien à faire , ca ne fonctionne pas.

Les lignes pour enregistrer les tables dans l'ordre :
          
            DBDataAdapterParents.Update(objDBDataSet.Tables("PARENT").Select(Nothing, Nothing, DataViewRowState.Added))  ' Cette ligne réinitialise les statuts "Added" des lignes de la tables Enfants !!!!!!!!!!!!!!
            DBDataAdapterEnfants.Update(objDBDataSet.Tables("ENFANT").Select(Nothing, Nothing, DataViewRowState.Added))


Pour information la procédure qui me permet de récupérer un numéro de clé auto-incrementé issue de la base. (Celle-ci est appelé pour chaque ligne pendant l'update de la table parent).
   Private Sub DBAdapterParents_RowUpdate(ByVal sender As Object, ByVal e As System.Data.OleDb.OleDbRowUpdatedEventArgs)
        If e.StatementType = StatementType.Insert Then
            Dim MaComRecup As New OleDb.OleDbCommand("SELECT @@IDENTITY", e.Command.Connection)
            MaComRecup.Transaction = MaTransaction
            e.Row.Item(ChampsE_Taches.ID_TACHE) = MaComRecup.ExecuteScalar
            e.Row.AcceptChanges()  ' Cette ligne réinitialise les statuts "Added" des lignes de la tables Enfants !!!!!!!!!!!
        End If
    End Sub


Merci de m'aider si vous pouvez, je suis vraiment embetté avec ce problème.

2 réponses

BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
14 févr. 2012 à 21:23
Bonjour, j'ai trouvé la solution. Il m'a fait transpirer le bestiaux...
Il suffit de changer la propriété AcceptRuleChange de la clé etrangere de la table Enfants à AcceptRejectRule.None le temps d'enregistrer la table Parents ensuite on peux repasser à AcceptRejetRule.Cascade et enregistrer la table Fille....Oufffff. Je suis soulagé.

   Private Sub DBAdapterParents_RowUpdate(ByVal sender As Object, ByVal e As System.Data.OleDb.OleDbRowUpdatedEventArgs)
        If e.StatementType = StatementType.Insert Then
            Dim MaComRecup As New OleDb.OleDbCommand("SELECT @@IDENTITY", e.Command.Connection)
            MaComRecup.Transaction = MaTransaction
            e.Row.Item("ID_PARENT") = MaComRecup.ExecuteScalar
            Dim FKCont As ForeignKeyConstraint = objDBDataSet.Tables("ENFANT").Constraints.Item(1)
            With FKCont
                .AcceptRejectRule = AcceptRejectRule.None
                .DeleteRule = Rule.Cascade
                .UpdateRule = Rule.Cascade
            End With
            e.Row.AcceptChanges()
           End If
    End Sub


PS : Je me suis mélangé les pinceaux dans mon premier poste remplacer (ChampsE_Taches.ID_TACHE) par "ID_PARENT"
3
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
14 févr. 2012 à 15:09
Bonjour, Personne n'a une idée SVP ?
0
Rejoignez-nous