PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Fenetre avec onglet > alimenter 2 tables > problème de cardinalité.
Fenetre avec onglet > alimenter 2 tables > problème de cardinalité.
Débuté par Sh1v4, 22 mar. 2024 15:16 - 9 réponses
Membre enregistré
32 messages
Posté le 22 mars 2024 - 15:16
Bonjour,

J'ai 2 tables

Fiche
Suivi

Liaison 0,1 > 1,1

Une fenêtre avec onglet (fiche : nom, prénom etc, et un onglet suivi)
Dès que je rempli des champs de suivi, que ce soit en création ou modification, j'ai une erreur de cardinalité.

J'utilise HEnregistre(Fiche) et HEnregistre(Suivi)

Si vous aviez un exemple, car je ne trouve rien dans ce sens. Et plus ça va, moins je comprends.
Membre enregistré
328 messages
Popularité : +8 (10 votes)
Posté le 22 mars 2024 - 15:34
Bonjour

si tu as des erreurs de cardinalité, il y a deux possibilités :

- soit elles sont mal renseignées dans ton analyse
- soit tu enregistres "mal" tes données

tu peux essayer d'ajouter la constant ignoreintégrité lorsque tu enregistre mais comme son nom l'indique tu perds la vérification faite.
Membre enregistré
32 messages
Posté le 22 mars 2024 - 16:37
Merci pour ton message.
C'est pour cela que je cherche un exemple d'insertion de donnée dans 2 tables car je ne comprends pas mon erreur.
Si j'enregistre uniquement dans fiche, cela fonctionne, si je rajoute Suivi, = erreur. Je continue de chercher.
Membre enregistré
328 messages
Popularité : +8 (10 votes)
Posté le 22 mars 2024 - 16:40
Quand tu as des liaisons tu dois faire de la façon suivante :

Enregistrer fiche
Affecter l'ID de l'enregistrement de fiche à ton ou tes enregistrement de suivis puis enregistrer le ou les suivis
Membre enregistré
3 891 messages
Popularité : +227 (347 votes)
Posté le 22 mars 2024 - 17:42
Bonjour,
D'après les cardinalité que tu nous donnes
Fiche (0,1)->(1,1)Suivi, un suivi ne peut être créé que s'il y a une fiche auparavant.

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
32 messages
Posté le 25 mars 2024 - 09:17
Voroltinquo > Effectivement c'est bien cela. Je pense que je ne comprends pas bien le fonctionnement, je suis en train de reprendre les bases.

J'ai déjà ma fiche qui est crée, et je veux la modifier en ajoutant des données dans les 2 tables en même temps. Mais dès que je rempli un champ qui doit aller sur la table suivi, j'ai une erreur.

Dans mon bouton j'ai simplement :

// Lecture des informations saisies
EcranVersFichier()

// Ajoute / Modifie l'enregistrement Henregistre ?
HAjoute(Fiche)
HAjoute(Suivi_equipe_mobile)


Et je me retrouve avec cette erreur

Que s'est-il passé ?
Erreur renvoyée par le serveur :
Erreur d'intégrité.
Les cardinalités côté clé étrangère (1,1) entre les rubriques <fiche.idfiche> ET <suivi_equipe_mobile.idfiche> ne sont pas respectées.

Code Erreur : 70015
Niveau : Erreur Non fatale
Code Erreur WD55 : 15

Module : WDHFSRV64.DLL (01F260101d - 29.0.204.8)

Informations de débogage :
IEWDHFSRV=137.5
Module=<WDHFSRV>
Informations supplémentaires :
EIT_TYPE_WDFILE : <0>
EIT_IDCODE : <-1>
EIT_LOGICALTABLENAME : <Suivi_equipe_mobile>
EIT_ITEMNAME : <IDFiche>
EIT_LINKNAME : <Contrainte_Fiche_Suivi_equipe_mobile>


Pourriez-vous m'indiquer ce que je dois revoir dans les tutos, ou si je dois partir directement sur 2 requêtes avec déclaration de variable ?
Message modifié, 25 mars 2024 - 09:18
Membre enregistré
3 891 messages
Popularité : +227 (347 votes)
Posté le 25 mars 2024 - 10:16
Tu n'initialises pas la valeur de la FK de Fiche dans Suivi. Pour le SGBD, ton tuple dans Suivi n'est donc relié à rien. Ce qui est en contradiction avec le premier 1 de (1,1)
Le code devrait ressembler à celà :

// Lecture des informations saisies
EcranVersFichier()

// Ajoute / Modifie l'enregistrement Henregistre ?
HAjoute(Fiche)
//On "relie" la Fiche et son suivi
Suivi_equipe_mobile.FK_Fiche=Fiche.PK_Fiche
//On valide le suivi
HAjoute(Suivi_equipe_mobile)


Par contre attention à HEnregistre, il ne déclenche pas les triggers

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 25 mars 2024 - 10:20
Membre enregistré
32 messages
Posté le 25 mars 2024 - 11:12
Merci beaucoup. Je commence à comprendre.
j'ai testé ton code directement et cela fonctionne mais crée un fiche à chaque modification.

J'ai modifier pour tester
// Lecture des informations saisies
EcranVersFichier()

// Ajoute / Modifie l'enregistrement
HModifie (Fiche)
//On "relie" la Fiche et son suivi
Suivi_equipe_mobile.IDFiche=Fiche.IDFiche
//Suivi_equipe_mobile.FK_Fiche=Fiche.PK_Fiche
//On valide le suivi
HModifie(Suivi_equipe_mobile)
// Ferme la fenêtre
Ferme("",Vrai)


J'ai encore quelques soucis suivant si la fiche suivi est crée ou non. Je vais voir pour rajouter des conditions, je pensais que Hajoute vérifiait tout seul si une valeur existait, du coup j'ai juste mis un HModifie car normalement la fiche est déjà crée par importation de fichier Excel.
Je vais voir pour rajouter des conditions.
Message modifié, 25 mars 2024 - 11:15
Membre enregistré
32 messages
Posté le 25 mars 2024 - 11:17
Pour Henregistre. Je vais voir tes recommandations sur son utilisation.
Message modifié, 25 mars 2024 - 11:18
Membre enregistré
32 messages
Posté le 25 mars 2024 - 17:54
@ Voroltinquo > En faisant des recherches je suis tombé sur ce post : https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev.old/26724-enregistrer-rubriques-deux-tables-differentes-dans-meme-tableau/read.awp

J'ai continué mes recherches car je suis parti loin, mais loin...
J'ai crée un champ qui affiche l'ID dans la fenetre fiche qui permet d'enregistrer et de modifier.

Puis :

Monid est une chaîne

Monid= SAI_ID_fiche_pour_vérif
//Info("ID de la fiche " + Monid)



// Lecture des informations saisies
EcranVersFichier()

// Ajoute / Modifie l'enregistrement Henregistre ?
HModifie(Fiche)
//On "relie" la Fiche et son suivi
Suivi_equipe_mobile.IDFiche=Fiche.IDFiche
//On valide le suivi si et seulement si
// Vérification de l'existence de l'ID Fiche
SI HLitRecherchePremier(Fiche, IDFiche,Monid) ALORS
// Si l'ID Fiche est présent, afficher "Oui"
Info("ID présent")
HModifie(Suivi_equipe_mobile)
SINON
// Si l'ID Fiche n'est pas présent, afficher "On peut y aller"
Info("ID pas présent, on va créer")
HAjoute(Suivi_equipe_mobile)
FIN


// Ferme la fenêtre
Ferme("",Vrai)


Mais plus ça va, plus je me complique, et la même pour l'affichage des 2 tables dans les champs d'une même fenêtre.