je voudrais crée une base de donnée qui me permettre de suivre les résultats des compétiteur de mon club:
pour cela j'ai pensé qui me fallait 3 table principal
une avec les renseignement des compétiteurs,
nom / prenom / date de naissance / sexe/ age / categorie /
adresse / mail.
une avec les discipline, et comme dans les discipline il existe des sous discipline, (environ 10 discipline et 100 sous discipline)
une sous discipline.
mon problème est comme dans toute compétition il y a des catégorie d'age
exemple :
poussin F et G jusqu'à 11ans
Benjamins F et G de 11ans à 12ans etc etc
je trouve la formule mais la table ne se met pas à jour, pourquoi?
les compétiteurs peuvent pratiquer plusieurs discipline et même plusieurs sous discipline.
mon problème est comment inscrire toute les disciplines de chaque compétiteur pour que lorsque je faire une recherche sur un compétiteur cela me donne toute les discipline et sous discipline qu'il pratique?
après je dois regroupe toute les informations du compétiteur pour lui inscrire s'est score ainsi que la place de la compétition.
je trouve la formule mais la table ne se met pas à jour, pourquoi?
Quelle est ta formule et comment mets-tu la table à jour?
Je pense que les champs Age et Categorie ne devraient pas se trouver dans la table Competiteurs, mais soit. Par contre, tu devrais mettre un champ Identifiant (auto-incrémenté) sur ta table. Tu peux très bien avoir 2 Michel Dupont inscrits, ça risque d'être gênant!
lorsque je faire une recherche sur un compétiteur cela me donne toute les discipline et sous discipline qu'il pratique?
Admettons les tables suivantes:
-table Activites (= sous-discipline) ( IdActivite , IdDisc, NomActivite). IdDisc représente la discipline dont dépend l'activité (ex: activité "SautLongueur" -> discipline "athlétisme").
-table Disciplines (IdDisc, NomDisc).
-table d'association ActiviteCompetiteur (IdCompetiteur, IdActivite). Elle permet de lier les compétiteurs aux activités qu'ils pratiquent.
A partir de là, pour lister les compétiteurs, leurs activités et les disciplines correspondantes, tu peux lancer cette requête:
SELECT NomCompetiteur, PrenomCompetiteur, NomDiscipline, NomActivite
FROM Competiteurs c, Activites a, Disciplines d, ActiviteCompetiteur ac
WHERE c.IdCompetiteur = ac.IdCompetiteur
AND ac.IdActivite = a.IdActivite
AND a.IdDisc = d.IdDisc
ORDER BY NomCompetiteur, PrenomCompetiteur, NomDiscipline, NomActivite
... lui inscrire s'est score ainsi que la place de la compétition.
Il te faut donc une table de scores.
-table Scores (IdComp, IdActivite, Score). S'il peut y avoir plusieurs scores pour la même activité (ex: 3 essais au saut à la perche), il faut ajouter un champ qui permettra de les différencier, comme par exemple un n° d'essai, un champ date ou timestamp...
Bon courage!
Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)
ActiviteCompetiteur est une table d'association. Il y a les tables Competiteurs et Activites. 1 competiteur peut exercer plusieurs activités, et 1 activité peut être exercée par plusieurs compétiteurs. Il te faut donc une table intermédiaire pour lier les compétiteurs aux activités qu'ils exercent.
En gros elle ressemble à ça:
pour la question de la formule de AGE et de la CATEGORIE
Je reviens sur ce que je disais dans mon premier post:
Je pense que les champs Age et Categorie ne devraient pas se trouver dans la table Competiteurs
Moi, je créerais une table Catégorie(NomCategorie, AgeMin, AgeMax, Sexe).
L'âge n'a normalement pas besoin de figurer dans ta table puisque c'est un champ calculé. L'idée, c'est de ne garder que les données élémentaires (date de naissance) et de calculer l'âge comme tu le fais, à la volée.
Ensuite, pour trouver la catégorie qui correspond, tu lances une requête:
SELECT NomCategorie FROM Categorie, Competiteur
WHERE Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
>=AgeMin
AND Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
<=AgeMax
AND Categorie.Sexe = Competiteur.Sexe
AND IdCompetiteur = MonCompetiteur
..Avec MonCompetiteur: identifiant du compétiteur que tu veux.
Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)
Cette table est indispensable pour lier Activites et Competiteurs. Ces 2 tables ont une relation "plusieurs à plusieurs" (1 compétiteur peut être lié à plusieurs activités, 1 activité peut être liée à plusieurs compétiteurs), ce n'est pas gérable par un SGBD relationnel. Dans ce cas, il faut décomposer la relation en 2 relations "un à plusieurs", en ajoutant une table intermédiaire. Cette table contient les clés primaires (identifiants) des 2 tables à associer. Ces 2 identifiants constituent la clé primaire de la table d'association. La table contient donc des couples (IdCompetiteur, IdActivite) uniques qui te permettent de retrouver pour chaque compétiteur toutes les activités qu'il pratique... ou dans l'autre sens, retrouver pour chaque activité tous les compétiteurs qui y participent.
les point virgule ne doive pas passe en SQL?
Essaie avec des virgules. Si tu mets ça dans une macro VBA par exemple, la fonction DiffDate s'écrit avec des virgules. Tu peux aussi utiliser une variable pour calculer l'âge et utiliser cette variable dans la requête...
Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)
jusque la s'est se que jamais deja plus ou mien fais ou pense
le seule petit point qui est pas très net s'est dans le code SQL
SELECT NomCompetiteur, PrenomCompetiteur, NomDiscipline, NomActivite
FROM Competiteurs c, Activites a, Disciplines d, ActiviteCompetiteur ac
WHERE c.IdCompetiteur = ac.IdCompetiteur
AND ac.IdActivite = a.IdActivite
AND a.IdDisc = d.IdDisc
ORDER BY NomCompetiteur, PrenomCompetiteur, NomDiscipline, NomActivite
s'est l'ActiviteCompetiteur tu va la cherche ou?
pour la question de la formule de AGE et de la CATEGORIE
pour l'age
dans le NOM du champ
Age: Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
pour la catégorie
dans le nom du champ:
Categorie: EvalCategorie(Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25);[Sexe])
et un module:Function EvalCategorie(Age As Integer, Sexe As String) As String
If Age <= 11 Then
If Sexe = "M" Then
EvalCategorie = "poussinG"
Else
EvalCategorie = "poussinF"
End If
ETC.....ETC.....ETC....
ElseIf Age > 59 Then
If Sexe = "M" Then
EvalCategorie = "Vétérans3"
Else
EvalCategorie = "Vétérans3"
End If
End If
End Function
Merci pour les renseignements que tu ma déjà apporté
Vous n’avez pas trouvé la réponse que vous recherchez ?
SELECT NomCategorie FROM Categorie, Competiteur
WHERE Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
>=AgeMin
AND Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
<=AgeMax
AND Categorie.Sexe = Competiteur.Sexe
AND IdCompetiteur = MonCompetiteur
ok pour les lieu entre les tables compétiteur et activité.
mais je ne voie toujours pas pourquoi tu fais une table intermédiaire?
pour les activités du compétiteur comment fais tu pour lui mettre plusieurs activité?
car la pour le moment j'ai du rajoute un champs activité dans ma table compétiteur pour pouvoir faire une lien
j'ai touver pour la catégorie a la place de ton code
SELECT NomCategorie FROM Categorie, Competiteur
WHERE Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
>=AgeMin
AND Int(DiffDate("j";[Datedenaissance];Maintenant())/365,25)
<=AgeMax
AND Categorie.Sexe = Competiteur.Sexe
AND IdCompetiteur = MonCompetiteur
j'ai mie
SELECT competiteur.NomCompetiteur, categorie.Nomcategorie
FROM competiteur INNER JOIN categorie ON competiteur.Sexe = categorie.Sexe
WHERE Int(DateDiff("d",[Datenaissance],Now())/365.25) BETWEEN AgeMin AND AgeMax;
je ne voie toujours pas pourquoi tu fais une table intermédiaire?
comment fais tu pour lui mettre plusieurs activité?
C'est justement pour ça que la table d'association est nécessaire!
Regardes mon post du 23/12: Dans le tableau (description de la table d'association), tu peux voir que pour le compétiteur n°1, il y a 3 lignes (1 pour chaque activité). Ce compétiteur exerce donc les activités n°1, 2 et 4. De la même manière, le compétiteur n°2 exerce les activités 1 et 2, etc...
Cette table te permet aussi de connaître les personnes inscrites à une activité. Ici, pour l'activité n°1, nous avons 3 inscrits: les compétiteurs 1,2 et 4. etc...
Si tu ajoutes un champ Activité dans la table Competiteurs, tu ne pourras ajouter qu'une seule activité par compétiteur.
@+.
Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)
Je ne connais pas l'utilisation des champs à valeurs multiple, mais je ne pense pas que ce soit l'idéal. Il te permet de connaître les activités d'un compétiteur, mais si tu veux savoir quels compétiteurs sont inscrits pour une activité donnée, je ne suis pas sûr que tu t'y retrouves facilement.
Voici la requête de création de la table d'association:
De cette manière, aucun souci pour interroger la base dans les 2 sens:
- Les activités exercées par le compétiteur n°1:
SELECT IdActivite FROM Activites a, ActiviteCompetiteur ac
WHERE a.IdActivite = ac.IdActivite
AND ac.IdCompetiteur = 1
- Les compétiteurs qui pratiquent l'activité n°3:
SELECT IdCompetiteur, NomCompetiteur, PrenomCompetiteur FROM Competiteurs c, ActiviteCompetiteur ac
WHERE c.IdCompetiteur = ac.IdCompetiteur
AND ac.IdActivite = 3
- Les compétiteurs qui pratiquent le javelot:
SELECT IdCompetiteur, NomCompetiteur, PrenomCompetiteur FROM Activites a, Competiteurs c, ActiviteCompetiteur ac
WHERE c.IdCompetiteur = ac.IdCompetiteur
AND a.IdActivite = ac.IdActivite
AND a.NomActivite = 'Javelot'
@+!
Si l'envie te prend de travailler, assied-toi et attend qu'elle te passe! (vieux -et faux!- dicton corse)