OVH Cloud OVH Cloud

Supprimer une ForeignKeyConstraint

2 réponses
Avatar
anagram
Bonjour à tous,

J'ai créé trois relations entre quatre datatables :

BDD.dataSet.Relations.Add("ResSousDomaines",
BDD.dataSet.Tables("ListeDomaines").Columns("idDomaine"),
BDD.dataSet.Tables("ListeSousDomaines").Columns("idDomaine"))

BDD.dataSet.Relations.Add("ResSousSousDomaines",BDD.dataSet.Tables("ListeSou
sDomaines").Columns("idSousDomaine"),
BDD.dataSet.Tables("ListeSousSousDomaines").Columns("idSousDomaine"))

BDD.dataSet.Relations.Add("ResModules",
BDD.dataSet.Tables("ListeSousSousDomaines").Columns("idSousSousDomaine"),
BDD.dataSet.Tables("ListeModules").Columns("idSousSousDomaine"))

Après avoir récupéré les bonnes données, je vide ces datatables comme ceci

dataSet.Tables("ListeDomaines").ChildRelations.Remove("ResSousDomaines")
dataSet.Tables("ListeSousDomaines").ChildRelations.Remove("ResSousSousDomain
es")
dataSet.Tables("ListeSousSousDomaines").ChildRelations.Remove("ResModules")

dataSet.Tables("ListeModules").Clear()
dataSet.Tables("ListeSousSousDomaines").Clear()
dataSet.Tables("ListeSousDomaines").Clear()
dataSet.Tables("ListeDomaines").Clear()

Mais je ne peux pas supprimer la datatable de la mémoire :
dataSet.Tables.Remove(dataSet.Tables("ListeModules"))

Cette ligne provoque l'exception : "Impossible de supprimer la table
ListeModules parce qu'elle est référencée dans la ForeignKeyConstraint
ResModules.
Comment puis-je supprimer les ForeignKeyConstraint ? Je n'ai rien trouvé qui
permette de le faire.

Merci d'avance.

2 réponses

Avatar
RAVAILLE James
Bonjour,

Avant d'effectuer la suppression de la table ListeModules, Vous devez
supprimer les contraintes créées suites aux relations spécifiées :
dataSet.Tables("ListeModules").Constraints.Clear()

En effet, L'objet DataRelation peut remplir deux fonctions :
- Il peut rendre disponible les enregistrements reliés à l'enregistrement,
avec lequel vous travaillez. Il fournit des enregistrements enfants, si vous
êtes dans un enregistrement parent, et vice-versa.
- Il peut appliquer des <U>contraintes d'intégrité référentielle</U>, en
imposant par exemple la suppression des enregistrements enfants, lorsque
l'enregistrement parent est lui-même supprimé.

Les contraintes que vous spécifiez dans un objet DataRelation, sont
automatiquement implémentées, lorsque vous créez les objets appropriés ou
définissez des propriétés. Si vous créez une contrainte de clé externe à
l'aide de l'objet DataRelation, des instances de la classe
ForeignKeyConstraint sont ajoutées à la propriété ChildKeyConstraint de la
relation de données.

Dans votre cas, il s'agit de supprimer les conraintes créées, sur la table
que vous souhaitez supprimer.


Cordialement,

--
James RAVAILLE.
MCAD .NET et MCT .NET
http://www.certifdotnet.com


"anagram" a écrit :

Bonjour à tous,

J'ai créé trois relations entre quatre datatables :

BDD.dataSet.Relations.Add("ResSousDomaines",
BDD.dataSet.Tables("ListeDomaines").Columns("idDomaine"),
BDD.dataSet.Tables("ListeSousDomaines").Columns("idDomaine"))

BDD.dataSet.Relations.Add("ResSousSousDomaines",BDD.dataSet.Tables("ListeSou
sDomaines").Columns("idSousDomaine"),
BDD.dataSet.Tables("ListeSousSousDomaines").Columns("idSousDomaine"))

BDD.dataSet.Relations.Add("ResModules",
BDD.dataSet.Tables("ListeSousSousDomaines").Columns("idSousSousDomaine"),
BDD.dataSet.Tables("ListeModules").Columns("idSousSousDomaine"))

Après avoir récupéré les bonnes données, je vide ces datatables comme ceci

dataSet.Tables("ListeDomaines").ChildRelations.Remove("ResSousDomaines")
dataSet.Tables("ListeSousDomaines").ChildRelations.Remove("ResSousSousDomain
es")
dataSet.Tables("ListeSousSousDomaines").ChildRelations.Remove("ResModules")

dataSet.Tables("ListeModules").Clear()
dataSet.Tables("ListeSousSousDomaines").Clear()
dataSet.Tables("ListeSousDomaines").Clear()
dataSet.Tables("ListeDomaines").Clear()

Mais je ne peux pas supprimer la datatable de la mémoire :
dataSet.Tables.Remove(dataSet.Tables("ListeModules"))

Cette ligne provoque l'exception : "Impossible de supprimer la table
ListeModules parce qu'elle est référencée dans la ForeignKeyConstraint
ResModules.
Comment puis-je supprimer les ForeignKeyConstraint ? Je n'ai rien trouvé qui
permette de le faire.

Merci d'avance.





Avatar
anagram
Merci James,

J'ai parfaitement réussi à supprimer les datatables grâce à votre aide.
Je ne savais pas que des contraintes de types "clé étrangère" se créent
automatiquement.
Merci pour votre réponse très complète !
A bientôt.

Cdt,
Xavier.

RAVAILLE James a écrit :
Bonjour,

Avant d'effectuer la suppression de la table ListeModules, Vous devez
supprimer les contraintes créées suites aux relations spécifiées :
dataSet.Tables("ListeModules").Constraints.Clear()

En effet, L'objet DataRelation peut remplir deux fonctions :
- Il peut rendre disponible les enregistrements reliés à l'enregistrement,
avec lequel vous travaillez. Il fournit des enregistrements enfants, si vous
êtes dans un enregistrement parent, et vice-versa.
- Il peut appliquer des <U>contraintes d'intégrité référentielle</U>, en
imposant par exemple la suppression des enregistrements enfants, lorsque
l'enregistrement parent est lui-même supprimé.

Les contraintes que vous spécifiez dans un objet DataRelation, sont
automatiquement implémentées, lorsque vous créez les objets appropriés ou
définissez des propriétés. Si vous créez une contrainte de clé externe à
l'aide de l'objet DataRelation, des instances de la classe
ForeignKeyConstraint sont ajoutées à la propriété ChildKeyConstraint de la
relation de données.

Dans votre cas, il s'agit de supprimer les conraintes créées, sur la table
que vous souhaitez supprimer.


Cordialement,