PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Gestion erreur intégrité
Gestion erreur intégrité
Started by Christian, Jan., 28 2005 5:07 PM - 4 replies
Posted on January, 28 2005 - 5:07 PM
bonjour

Je gere les intégrités manuellement, et j'affiche un fen popup qui me donne les enregistrements concernés.

Lorsque je n'ai qu'une règle entre un fichier et un autre, pas de problème mais j'ai des fichiers qui ont des contraines sur 1,2, 3 autres fichiers. Ma question est comment puis je faire pour enchainer les gestion erreur d'intégrité suivant le fichier concerné

sur le fichier A j'ai une contrainte 0,n 0,1 sur le fichier B et la même sur le fichier C

Dans mon code j'ai pour la première gestion dans ce cas Codes Postaux / Employeurs

HSurErreur(Codes_Postaux,hErrIntégrité,"")
SI OuiNon(Non,"Voulez-vous vraiment supprimer ce Code Postal ?") ALORS
HSupprime(Codes_Postaux)
SI HErreurIntégrité() = Vrai ALORS
OuvrePopup(Integrite_Employeurs, "CP_Id="+Codes_Postaux.CP_Id)
RETOUR
FIN

et je voudrai gérer à la suite Codes Postaux / Contacts
Ouvrepopup(Integrite_Contacts_Perso, "CP_Id="+Codes_Postaux.CP_Id)
Je ne voie pas comment faire

Merci de votre aide

Christian
Posted on January, 28 2005 - 7:25 PM
1. Pour moi, "Gérer manuellement" signifie qu'on s'occupe de tout.
Le fait d'utiliser "HErreurIntégrité()" signifie que tu comptes quand même sur Windev pour effectuer le boulot...

2. Pour gérer l'intégrité manuellement d'une façon REELLE (ce que personnellement je préfère... quitte à me faire foudroyer par les concepteurs de Windev):
- Il faut, dans l'analyse, NE PAS établir de lien entre le fichier propriétaire et le fichier membre mais l'établir soi-même par programmation lors de l'ajout par l'utilisateur d'un enregistrement dans le fichier membre.
- Il faut, lors d'une demande de suppression d'un enregistrement dans un fichier propriétaire, lancer une recherche 'manuelle' d'existence de la clé de liaison dans TOUS les fichiers membres. ---> HRecherche(...) ... Si HTrouve ...
Posted on January, 28 2005 - 9:58 PM
Merci de ta réponse, mais je ne suis programmeur de métier et j'ai quand même un manque de connaissances. Pourrai tu me donner un exemple de code pour une gestion compètement "manuelle" ou la solution pour pouvoir gérer mes diff contraintes avec "HErreurIntégrité()"

Merci encore
Posted on January, 29 2005 - 10:46 AM
Si, dans ton analyse, les liaisons ont été faites correctement avec des cardinalités ok, Windev signalera à l'utilisateur lorsqu'un problème d'intégrité se pose. Il s'occupera de tout.Si tu veux diriger la manoeuvre, voici un exemple simpliste:
Un article a été encodé avec une référence 'x' (clé unique) dans le fichier 'Articles'. Si cette référence a été recopiée (clé avec doublons) dans le fichier 'Achats' ou 'Ventes' (on a acheté ou vendu cet article): sa suppression est donc interdite dans le fichier 'Articles'.
Voici le code du bouton [Supprimer] un article:
Explication,Txt sont des chaînes
Txt="CERTAIN DE VOULOIR"+RC
Txt=Txt+"SUPPRIMER CET ENREGISTREMENT ?"
SI OuiNon(Non,Txt) ALORS
..VerifIntegrite(Articles.Reference,Explication) // Appel procédure
..SELON SansEspace(Explication)
....CAS "Achats" // Article présent dans le fichier "Achats"
......Txt="LA SUPPRESSION DE CET ARTICLE N'EST PAS AUTORISEE."+RC
......Txt=Txt+"SA REFERENCE EST PRESENTE DANS LE FICHIER DES ACHATS."
......Erreur(Txt)
....CAS "Ventes" // Article présent dans le fichier "Ventes"
......Txt="LA SUPPRESSION DE CET ARTICLE N'EST PAS AUTORISEE."+RC
......Txt=Txt+"SA REFERENCE EST PRESENTE DANS LE FICHIER DES VENTES."
......Erreur(Txt)
....AUTRES CAS // Suppression autorisée
......HSupprime(Articles)
......SI ErreurDétectée ALORS
........Erreur("SUPPRESSION IMPOSSIBLE !"+RC+HErreurInfo())
........RETOUR
......FIN
......gbFenetreModifiee = Vrai
......HLitSuivant(Articles,Reference)
......SI HEnDehors() ALORS
........HLitDernier(Articles,Reference)
........SI HEnDehors() ALORS
..........RADEfface()
..........Info("LE FICHIER EST VIDE")
..........RETOUR
........FIN
......FIN
......RADAffiche()
..FIN
FIN

Voici le code de la procédure:
PROCEDURE VerifIntegrite(Entree,Sortie)
// Entree = Référence de l'article
// Sortie = - 'Achats' si article présent dans le fichier "Achats"
// - 'Ventes' si article présent dans le fichier "Ventes"
HRecherchePremier(Achats,ReferenceArticle,Entree)
SI HTrouve(Achats)ALORS
..Sortie="Achats" // Erreur d'intégrité sur le fichier "Achats"
SINON
..HRecherchePremier(Ventes,ReferenceArticle,Entree)
..SI HTrouve(Ventes)ALORS
....Sortie="Ventes" // Erreur d'intégrité sur le fichier "Ventes"
..SINON
....Sortie="OK" // Pas d'erreur d'intégrité
..FIN
FIN
(J'ai mis des ... afin que tu repères l'indentation)
Posted on January, 30 2005 - 12:46 PM
Merci beaucoup