PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Fenetre avec onglet > alimenter 2 tables > problème de cardinalité.
Fenetre avec onglet > alimenter 2 tables > problème de cardinalité.
Iniciado por Sh1v4, 22,mar. 2024 15:16 - 9 respuestas
Miembro registrado
32 mensajes
Publicado el 22,marzo 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.
Miembro registrado
328 mensajes
Popularité : +8 (10 votes)
Publicado el 22,marzo 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.
Miembro registrado
32 mensajes
Publicado el 22,marzo 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.
Miembro registrado
328 mensajes
Popularité : +8 (10 votes)
Publicado el 22,marzo 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
Miembro registrado
3.890 mensajes
Popularité : +227 (347 votes)
Publicado el 22,marzo 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
Miembro registrado
32 mensajes
Publicado el 25,marzo 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 ?
Mensaje modificado, 25,marzo 2024 - 09:18
Miembro registrado
3.890 mensajes
Popularité : +227 (347 votes)
Publicado el 25,marzo 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
Mensaje modificado, 25,marzo 2024 - 10:20
Miembro registrado
32 mensajes
Publicado el 25,marzo 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.
Mensaje modificado, 25,marzo 2024 - 11:15
Miembro registrado
32 mensajes
Publicado el 25,marzo 2024 - 11:17
Pour Henregistre. Je vais voir tes recommandations sur son utilisation.
Mensaje modificado, 25,marzo 2024 - 11:18
Miembro registrado
32 mensajes
Publicado el 25,marzo 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.