IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Erreur d'intégrité sur les cardinalités [WD18]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Erreur d'intégrité sur les cardinalités
    Bonjour,

    Je me remets doucement à Windev et j'ai un souci dans le développement de mon application. Je vous explique :

    Mon application gère une collection de cartes à jouer (style Magic). Je fournis les images des cartes à mes utilisateurs. A chaque nouvel ajout de cartes, je dois mettre à jour la base de données du programme. Bref, voici le problème :

    J'ai deux fichiers HF, le premier, Carte, contient toutes les informations de la carte sauf le chemin vers son image (car j'ai besoin de le modifier lors de mises à jour, contrairement aux informations de carte que je ne dois pas modifier). Le second fichier, Image, contient un identifiant unique, le chemiin de l'image, et la clé de liaison (IDCarte) le reliant à la carte.

    Actuellement, voici les contraintes d'intégrités : cardinalités 1,1 de chaque côté.

    Je cherche à créer une nouvelle carte. Voici donc le code du bouton d'ajout/modification de carte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Lecture des informations saisies
    EcranVersFichier()
     
    // S'il s'agit d'un nouvel enregistrement
    SI Carte..NouvelEnregistrement = Vrai ALORS
    	// On l'ajoute
    	Image.ImageCarte = fExtraitChemin(SAI_ImageCarte, fFichier) + ".png" // On veut seulement le nom du fichier
    	HAjoute(Image)
    	HAjoute(Carte)
    SINON
    	// On le modifie
    	HLitRecherchePremier(Image,IDCarte,Carte.IDCarte)
    	SI HTrouve(Image) ALORS
    		Image.ImageCarte = fExtraitChemin(SAI_ImageCarte, fFichier) + ".png" // On veut seulement le nom du fichier
    		HModifie(Image)
    	FIN
    	HModifie(Carte)
    FIN
    Je précise que lors de l'ouverture de la fenêtre en mode Ajout, j'ai bien inséré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HRAZ(Carte)
    HRAZ(Image)
    Lors du clic sur ce bouton, Windev me signale une erreur d'intégrité.
    Les cardinalités côté clé étrangère (1,1) entre les rubriques <Carte.IDCarte> et <Image.IDCarte> ne sont pas respectées.
    Comment résoudre ce problème, sachant que le fichier Image est rempli en même temps que le fichier Carte ?

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour

    Problème assez classique, en quelque sorte l’œuf et la poule, dont la situation que vous exposez ne justifie pas les complications que cela va susciter.

    En général, on considère que - sauf circonstances particulières - les entités reliées par une association ayant une cardinalité 1,1 des deux côtés doivent obligatoirement fusionner.

    On ne voit pas pourquoi vous acceptez de modifier le chemin dans le fichier Image et pas dans le fichier Carte.
    Dans votre cas, le fichier Image est clairement une propriété du fichier Carte et la sagesse conseille de l'y réintégrer.

    Faites une petite recherche sur Google ou sur le site (ALM ou SGBD) et vous ne trouverez pas d'autre conseil.

    Bon week-end.

    Hemgé

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Bonjour et merci pour la réponse.

    Le fichier Carte sera modifié par les utilisateurs pour indiquer s'ils possèdent ou non la carte en question et en combien d'exemplaires. De ce fait, si je fusionne la propriété image dans le fichier Carte, je ne pourrais pas inclure ce fichier Carte dans un patch de mise à jour puisque cela écraserait les modifications par l'utilisateurs. C'est pour cela que j'ai préféré déporter cette propriété, ainsi qu'une autre d'ailleurs, dans un nouveau fichier.

    Cela dit, j'ai trouvé la solution à mon problème (en fait je le contourne). J'ai changé les cardinalités en 0,1 de chaque côté et j'applique le code suivant sur mon bouton Valider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // Lecture des informations saisies
    EcranVersFichier()
     
    // S'il s'agit d'un nouvel enregistrement
    SI Carte..NouvelEnregistrement = Vrai ALORS
    	HAjoute(Carte)
    	HLitRecherchePremier(CarteInfoSupp,IDCarte,Carte.IDCarte)
    	SI PAS HTrouve(CarteInfoSupp) ALORS
    		// On l'ajoute
    		CarteInfoSupp.ImageCarte = fExtraitChemin(SAI_ImageCarte, fFichier) + ".png"
    		CarteInfoSupp.IDCarte = Carte.IDCarte
    		HAjoute(CarteInfoSupp)
    	FIN
    SINON
    	// On le modifie
    	HLitRecherchePremier(CarteInfoSupp,IDCarte,Carte.IDCarte)
    	SI HTrouve(CarteInfoSupp) ALORS
    		CarteInfoSupp.ImageCarte = fExtraitChemin(SAI_ImageCarte, fFichier) + ".png"
    		HModifie(CarteInfoSupp)
    	FIN
    	HModifie(Carte)
    FIN
    Ici, le fichier Image a été renommé en CarteInfoSupp.

    De cette façon, ça fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/03/2010, 16h01
  2. Question sur les cardinalités
    Par gralizem dans le forum Schéma
    Réponses: 15
    Dernier message: 13/10/2009, 20h49
  3. Erreur signalé que sur les packages
    Par raspac dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/03/2009, 11h26
  4. Erreur de cast sur les generics!
    Par Razgriz dans le forum Général Java
    Réponses: 8
    Dernier message: 02/10/2007, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo