Table relation "violation de clé"

vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009 - 22 déc. 2008 à 09:42
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 24 déc. 2008 à 22:45
bonjour tout le monde
je maitrise pas très bien SQl-ce qui m'aurai peut être évité ce problème !
 
mon problème est que j'ai une cardinalité N dans les deux sens d'un relation de deux tables T1 et T2 , et dans ce cas on
est obligé de migrer les deux clé de T1 et T2 vers la relation, et que
cette relation devienne par la suite une table contenant les deux clé
de T1 et T2.

dans un masque de saisie ou j'utilise la table relation pour lui affecté les deux clé de T1 et T2, je reçoi le message d'erreur "violation de clé" chose qui est normale puisque il ya double clé dans la table relation que j'appellerai T3.
je concrétise un peut :
mon exemple c'est dans le cas d'un Candidat et Examen

et la relation est :

1 sens : un candidat peut subir un ou plusieurs examens.

2 sens : un examen peut être subit par un ou plusieurs candidat.

j'aurai besoins de consulter pour un examen, les candidats qui ont participé, et aussi pour un candidat les examen qui a subit.

j'ai pensé a une solution ou j'enlève le mention index de la table T3 , mais dans une consultation ultérieure je dois indexé pour faire la recherche ,par exemple :  (T3.IndexfeildNames:='champClé') puis je recherche avec  T3.Findkey([T1champclé]).
mais aussi le soucis est comment desactivé cet index apres ma recherche ?
ou bien s'il ya une autre solution, j'accepte tout comentaire et toute solution .
merci d'avoir pris la peine de lire tout ca et merci d'avance pour vos reponses .

et au fait ! si vous avez des solution avec requettes Sql , veillez svp detailer un peut (je suis nul en sql) !
vlado !

9 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
22 déc. 2008 à 16:58
et avec ce shéma :


un candidat peut concourir à plusieurs examens et
un examen peut être lié à plusieurs candidats
 
Les enregistrements dans la table N-N permettent les deux possibiltés :
ex :

MARTIN       Sociologie
MARTIN       Physique
DUPONT      Acoustique
DURAND      Sociologie
DURAND      Physique
DUPONT      Chimie

Dans cette table, on peut ajouter d'autres propriétés telles que
la date de l'examen, la note et le résultat, effectuer des tris et des requêtes.

cantador
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
23 déc. 2008 à 09:29
salut Cantador

effectivement c'est ce que j'ai fais dès le début, y a pas de soucis coté conception je maitrise très bien (je t'avais dis que je suis de l'ancienne école )

mon probleme est : comment implementer tout ça,
le premier probleme c'est bien entendu la table T3 que j'ai appeler effictivement Condidat_Examen
pour programmer un condidat à un examen, j'extrait les info des tables condidat et examen, puis en validant j'envois les deux clés vers la table Condidat_Examen, et c'est la que ca coinse , puisque si je programme le meme condidat pour un 2eme examen ca m'affiche "violation de clé" puisque il ya doublant.
en remediant j'ai enlevé l'index de cette table , et quand je fais une recherche j'utilise Condidat_examen.indexNames; mais en validant je recois une erreur "l'index est en lecture seul", et la je suis desorienté , du coup je suis coinsé
voila cantadore j'espere que tu as serné ou est mon probleme
merci encore .

apprendre !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 déc. 2008 à 13:17
oui, bien compris..

Dans la table N-N, il ne faut pas mettre de clé primaire car elle ne sert à rien...
il te faut donc afin d'éviter les doublons, un autre champ avec une propriété unique (ex  n° de l'examen)

Lors de l'ajout dans cette table, il te faudra donc :
le CodeCandidat, le CodeNatureExamen et son Numéro (unique) ou autre chose mais tjrs unique.

cantador
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
23 déc. 2008 à 14:15
bien compris , mais quand je fais la recherche dans cette table comment je doit faire ? puisque toutes les consultations se ferons a partire de cette table !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 déc. 2008 à 16:38
ah, ah..

pour la recherche, il faut utiliser les tables 1-N :

Tu sélectionnes un candidat et tu obtiens avec une requête, l'ensemble des examens auxquels il a participé.


ou tu sélectionnes un examen et tu obtiens l'ensemble des candidats qui ont planché.

cantador
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
24 déc. 2008 à 08:32
bonjour cantador
merci pour toutes ces reponses c tres fructueux, mais là il s'agit de requettes !!
moi j'utilise des tables paradox (pour le momment), et je veux executer ces requette sur un Grid en premier lieux puis sur un QReport en dexieme.
dois je utiliser de Tquery ? Dois je les poser sur mon Module ou sur le fiche en question ? puis dans quel evenement appeller la requette ?
et cela nous emmene a une question que j'ai deja posé avant sur ce forum puisque je voullais trier avec des DBComboBox.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
24 déc. 2008 à 10:55
Hou hou, ça fait beaucoup de questions à la fois...



moi j'utilise des tables paradox (pour le momment), et je veux executer ces requette sur un Grid en premier lieux puis sur un QReport en dexieme.


Mais, il n'y aucun soucis...
Paradox a aussi son langage SQL certes légèrement différent des autres
(encore que de ce côté, chaque éditeur essaie d'imposer son propre langage...si bien qu'il n'y en pas deux identiques !)

Le TQuery : oui bien sûr et surtout le nec plus ultra :
un gestionnaire de base avec un éditeur SQL avec lequel, tu pourras élaborer rapidement tes requêtes.


quant au tri, c'est juste une option dans la requête voire une propriété d'un composant.

cantador
0
vladocb Messages postés 29 Date d'inscription jeudi 1 juin 2006 Statut Membre Dernière intervention 15 février 2009
24 déc. 2008 à 16:19
merci beaucoup cantador
je vais essayé d'appliquer , et de chercher aussi , je pense que le module base de donnée a un éditeur sql, en tout cas je vais essayé de me débrouiller , et je te mettrai accourant .
mes sincères remerciements !

pardonne moi si je t'ai poser pleines de questions a la fois.
vlado !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
24 déc. 2008 à 22:45
heu..le pardon c'est un peu fort...
reviens quand tu veux vladocb..


si tous ceux qui posent des questions avaient ton éducation..


tiens je vois une étoile passée..



normal c'est Noël !

cantador
0
Rejoignez-nous