Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2005, 16h32   #1
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
Par défaut Création requète avec champs heure

Je vous explique:
Je suis en train de mettre en place une base de données qui gère une compétition sportive.

j'ai une table "liste des compétiteurs" avec un champs "heure début épreuve", un autre "intervalle entre compétiteur".

Tous les 10 compétiteurs, il doit y avoir une pause, mettons 15 minutes.

j'aimerai crée une requète avec la liste des compétiteurs leur "horraire départ " en fonction du début de l'épreuve et de l'intervalle et intégrer tout les 10 compétiteurs ma pause de 15 minutes.
Est ce possible ?

PHIL
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 16h51   #2
Membre émérite
 
Avatar de FRED.G
 
Inscription : novembre 2002
Messages : 1 029
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2002
Messages : 1 029
Points : 898
Points : 898
il est étonnant de stocker dans une même table ta liste des compétiteurs et des champs "heure début épreuve" + "intervalle entre compétiteur"

Ne devrais-tu pas plutôt avoir une table Compétieurs, une table Compétitions (dans laquelle on trouverait les champs "heure début épreuve" + "intervalle entre compétiteur") et une table qui fait l'association entre les deux par les clés primaires :

IdCompétiteur, IdCompétition

Bon. A partir de là, me confirmes-tu qu'il y a bien plusieurs compétitions repérables par leur identifiant primaire ?
Si oui je suppose que l'intervalle entre chaque participants se calcule à partir du début d'une compétition donné et uniquement pour les participant à cette compétition...

Par ailleurs, pour chaque compétition, tous les 10 candidats, on insère 15 minutes...
Mais on compte 10 à partir du début d'une compétition, pas du début de l'ensemble des compétition, n'est-ce pas ?
__________________
"Fred point G"

Recherche vieux jeux et autres ordis anciens !!

(\ _ /)
(='.'=)
(")-(")
FRED.G est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h10   #3
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
Exactement, j'ai une table "compétiteurs" et une autre "compétition" avec un identifiant primaire pour chaque épreuve.

Il y a plusieurs compétitions, l'intervalle entre chaque participants se calcule à partir du début d'une compétition donné et uniquement pour les participant à cette compétition. Et enfin, on insère 15 minutes tout les 10 compétiteurs à partir du début de la compétition et non du début de l'emsemble des épreuves, puisque le début de chaques épreuves est différent.

voilà pour plus d'infos
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h18   #4
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Il manque quand même une donnée importante ... Quelle est la durée entre le passage de deux compétiteurs ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h20   #5
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
Dans mon premier message j'indique qu'il y a un champs "intervalle entre compétiteur" dans la table "compétition".
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h22   #6
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Et l'ordre de passage des compétiteurs ? Tu as un moyen de les ordonnés ? Parce que à priori l'heure de passage de chaque compétiteur n'as pas besoin d'être stocké
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h26   #7
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Citation:
Envoyé par philpaul
Dans mon premier message j'indique qu'il y a un champs "intervalle entre compétiteur" dans la table "compétition".
Non tu as dit :

Citation:
j'ai une table "liste des compétiteurs" avec un champs "heure début épreuve", un autre "intervalle entre compétiteur".
C'est loin d'être pareil !

La structure idéale serait inspirée de ceci :

Compétition(N°Compet, DateCompet,HeureDebut,IntervalleCompetiteur)
Participant(N°Participant,Nom, etc)
Participer(N°Compet#,N°Participant#,NumOrdrePassage (numAuto))

Le NumOrdrePassage servira uniquement à ordoner les participants pour la compet

Ensuite les requêtes seront assez simples, je te laisse dans un premier temps y reflechir
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h26   #8
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
Si bien sur, chaque compétiteur a un dossard, et il doivent partir dans l'ordre de leur dossard. je stocke le champs "dossard" dans la table "compétiteur"
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h27   #9
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Citation:
Envoyé par philpaul
Si bien sur, chaque compétiteur a un dossard, et il doivent partir dans l'ordre de leur dossard. je stocke le champs "dossard" dans la table "compétiteur"
Donc pour chaque compétition les compétiteurs garde le même dossars et ce tout le long de leur carrière :
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h39   #10
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
Je ne gère qu'une seule compétition, avec plusieurs épreuves de différent niveaux. Lorsque les compétiteurs s'engage auprès de l'organisateur (en l'occurence moi) ils se voient atribuer un dossard qui détermine leur ordre de passage. Le numéro du dossard repart au numéro 1 pour chaque épreuve. J'ai donc un champs Idcompétiteur ("numéro épreuve_numéro dossard") dans ma table compétiteur.
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h42   #11
Membre émérite
 
Avatar de FRED.G
 
Inscription : novembre 2002
Messages : 1 029
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2002
Messages : 1 029
Points : 898
Points : 898
Moi j'ai écris une requête mais elle ajoute l'intervalle au 15 minutes (tous les 10 candidats.
Par exemple pour un intervalle de 5 minutes, l'attente entre le 10 ° et le 11 ° sera de 15 + 5 minutes = 20 minutes.

ça te va ?
__________________
"Fred point G"

Recherche vieux jeux et autres ordis anciens !!

(\ _ /)
(='.'=)
(")-(")
FRED.G est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h53   #12
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
ça reviens en fait à mon modèle ... sauf que ce que tu appelles épreuves je l'ai appelé compétition

Donne nous réellement la structure de tes tables ... car si le modèle conceptuel est faux ... tout est faux
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 17h55   #13
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Citation:
J'ai donc un champs Idcompétiteur ("numéro épreuve_numéro dossard") dans ma table compétiteur.
Si le numéro change à chaque epreuve, ce numéro doit figurer dans la table participer et non dans la tablecompétiteur
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 18h01   #14
Membre émérite
 
Avatar de FRED.G
 
Inscription : novembre 2002
Messages : 1 029
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2002
Messages : 1 029
Points : 898
Points : 898


Je suis trop nul, si tu ne veux pas cumuler l'intervale entre les épruves et la pause il suffit dès le départ de soustraire la valeur de l'intervale à la valeur de la pause...

Bon voici à quoi doit ressembler ta requête :

Code :
1
2
SELECT ListeCompétiteurs.IdCompétition, ListeCompétiteurs.IdCompétiteur, DateAdd("n",([Compétitions].[Intervalle]*(SELECT Count(*) FROM ListeCompétiteurs AS T WHERE T.IdCompétiteur<ListeCompétiteurs.IdCompétiteur AND T.IdCompétition = ListeCompétiteurs.IdCompétition))+Int((SELECT Count(*) FROM ListeCompétiteurs AS T WHERE T.IdCompétiteur<ListeCompétiteurs.IdCompétiteur AND T.IdCompétition = ListeCompétiteurs.IdCompétition)/10)*15,[Compétitions].[Début]) AS Départ
FROM Compétitions INNER JOIN (Compétiteurs INNER JOIN ListeCompétiteurs ON Compétiteurs.IdCompétiteur = ListeCompétiteurs.IdCompétiteur) ON Compétitions.IdCompétition = ListeCompétiteurs.IdCompétition;
J'explique :
le champ important est celui-ci :
Code :
DateAdd("n",([Compétitions].[Intervalle]*(SELECT Count(*) FROM ListeCompétiteurs AS T WHERE T.IdCompétiteur<ListeCompétiteurs.IdCompétiteur AND T.IdCompétition = ListeCompétiteurs.IdCompétition))+Int((SELECT Count(*) FROM ListeCompétiteurs AS T WHERE T.IdCompétiteur<ListeCompétiteurs.IdCompétiteur AND T.IdCompétition = ListeCompétiteurs.IdCompétition)/10)*15,[Compétitions].[Début]) AS Départ
Le principe, c'est d'utiliser une sous requête pour compter les candidats déjà traités par rapport à chaque enregistrement.

Dans mon exemple, j'ai une table Compétiteurs, une table Compétitions et une table qui fait ListeCompétiteurs qui fait l'association Compétiteurs.IdCompétiteur <-> Compétitions.IdCompétition

Si tu as besoin d'explication, demande.
__________________
"Fred point G"

Recherche vieux jeux et autres ordis anciens !!

(\ _ /)
(='.'=)
(")-(")
FRED.G est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 18h03   #15
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Et il est où l'ordre de passage par dossard là dedans ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 18h03   #16
Membre émérite
 
Avatar de FRED.G
 
Inscription : novembre 2002
Messages : 1 029
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2002
Messages : 1 029
Points : 898
Points : 898
Citation:
Envoyé par Tofalu
Citation:
J'ai donc un champs Idcompétiteur ("numéro épreuve_numéro dossard") dans ma table compétiteur.
Si le numéro change à chaque epreuve, ce numéro doit figurer dans la table participer et non dans la tablecompétiteur
tout à fait, mais moi j'ai pas le temps de faire raffiner alros je lui donne l'essentiel. Et cela lui fera un bon exercice que de remplacer mon champ Compétiteurs.IdCompétiteur par un champ ListeCompétiteurs.Dossart

Enfin très pas dur comme exercice...
création du champ + copier coller pour remplacer dans la requête.
__________________
"Fred point G"

Recherche vieux jeux et autres ordis anciens !!

(\ _ /)
(='.'=)
(")-(")
FRED.G est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 20h21   #17
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
citation:Tofalu à écrit
Citation:
Et il est où l'ordre de passage par dossard là dedans
pour ce qui est de l'ordre des dossard, le dossard n°1 après le dossard n°2 puis le n°3 ... ce pas compliqué dans l'ordre des numéros de dossard
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2005, 20h58   #18
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
FRED.G
j'ai essayé ta requète mais elle me donne pour heure de départ l'heure du début pour les 10 premiers et l'heure du début + 15 minutes pour les 10 suivant et ainsi de suite
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 00h19   #19
Membre émérite
 
Avatar de FRED.G
 
Inscription : novembre 2002
Messages : 1 029
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2002
Messages : 1 029
Points : 898
Points : 898
Vérifie la valeur de [Compétitions].[Intervalle]
Ce champ ne doit pas afficher 0 mais la durée de chaque épreuve d'une compèt.

Sinon, crée un champ spécial pour vérifier la valeur de
Code :
(SELECT Count(*) FROM ListeCompétiteurs AS T WHERE T.IdCompétiteur<ListeCompétiteurs.IdCompétiteur AND T.IdCompétition = ListeCompétiteurs.IdCompétition))
Ceci doit compter le nom de compétiteurs dont le dossard est infèrieur à celui de l'enregistrement en cours dans une même compétition.
Ca doit ressembler, pour chaque compèt, à :
Citation:
0
1
2
3
4
5
6
7
8
9
10
11
12
Etc.
__________________
"Fred point G"

Recherche vieux jeux et autres ordis anciens !!

(\ _ /)
(='.'=)
(")-(")
FRED.G est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 11h27   #20
Invité régulier
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 7
Points : 7
L'erreur vennait du format du champs "intervalle", je l'avais mis en format "heure", alors qu'il doit être en format "numérique".

J'ai même été un peu plus loin en remplaçant le"10" par un champs "fréquence des pauses" et le "15" par durée des pauses"

merci à tous c impécable
phil
philpaul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h10.


 
 
 
 
Partenaires

Hébergement Web