par , 11/06/2015 à 21h42 (4039 Affichages)
Ce billet traite de la fonction HSupprimeTout et les contraintes d'intégrité dans l'EDI WinDev
Définition
Les contraintes d'intégrité référentielle en cascade définissent les actions exécutées par un SGBD lorsqu'un utilisateur tente de supprimer ou de mettre à jour une clé vers laquelle pointent des clés étrangères existantes.
Contexte technique
WinDev : 19, 20
BDD : HF classic et HF SQL
Une table commande avec les colonnes suivantes
Nom |
Description |
Type |
Taille |
ID |
Identifiant |
Id. automatique |
8 |
Date |
Date de la commande |
Date |
8 |
Numero |
Numéro interne de la commande |
Texte |
10 |
Une table DetailCommande avec les colonnes suivantes :
Nom |
Description |
Type |
Taille |
ID |
Identifiant |
Id. automatique |
8 |
IDCommande |
Identifiant de la commande |
Numerique |
8 |
Ligne |
Numéro de la ligne de la commande |
Numérique |
4 |
Article |
Id de l'article |
Numerique |
4 |
cardinalités : 0,n --- 1,1
contrainte d'intégrité pour suppression : "Supprimer le commande et tous ses DetailCommande".
Suppression du contenu
Afin de tester le respect de la contrainte d'intégrite, nous allons supprimer l'ensemble du conte de la table Commande. WinDev met à notre disposition deux fonctions Hyperfile :
Suppression via HSupprime
WinDev permet de supprimer un enregistrement avec la fonction HSupprime, pour supprimer l'ensemble des enregistrements nous mettons en place une boucle qui parcours le fichier.
1 2 3 4
|
POUR TOUT EXPRESS_Commande
HSupprime(EXPRESS_Commande)
FIN |
Nous constatons que le fichier CommandeDetail est vide.
Suppression via HSupprimeTout
WinDev permet de supprimer l'ensemble du contenu d'un fichier avec la fonction HsupprimeTout, mettons en pratique cette fonction
HSupprimeTout(EXPRESS_Commande)
Comparé au code précédent, nous avons un code plus concis, plus clair et qui se comprend très rapidement. Cette fonction à que des avantages ... mais nous n'avons pas vérifié le contenu du fichier CommandeDetail. Surprise, celui-ci contient tous les enregistrements, la fonction HSupprimeTout ne prend pas en compte la contrainte d'intégrité définie. J'ai effectué une requête au support technique qui m'a confirmé la non prise en charge, voici lleur réponse :
Bonjour Monsieur xxxxxx,
Merci pour ces éléments. En fait HSupprimeTout ne réalise pas une suppression classique, à la manière de hSupprime. Cette commande est plutôt une version rapide de hCreation(), car notamment, elle réinitialise les identifiants automatiques.
Cette commande n'active pas le contrôle d'intégrité.
Je suis sincèrement désolé de la gêne occasionnée et je vous remercie de votre coopération.
L'équipe du Support Technique Gratuit reste à votre disposition.
Conclusion
Avec cette exemple et la confirmation de PC-Soft, nous avons constaté la non prise charge les contraintes d'intégrité par la fonction HSupprimeTout, cette constatation ne rend pas la fonction inutilisable. Il est possible de l'utiliser mais dans le cas d'utilisation de contraintes d'intégrité, vous devrez gérer celle-ci manuellement. A voir si Pc-Soft améliorera cette fonction dans la version 21
Affaire à suivre
Mis à jour 16/07/2015 à 21h53 par dsr57
- Catégories
-
WinDev