Eros2007
Messages postés36Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention16 avril 2023
-
19 août 2007 à 14:14
Eros2007
Messages postés36Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention16 avril 2023
-
19 août 2007 à 23:15
Bonjours T L 'monde
je vous demande de bien vous pencher sur ce cas
qui peut etre trés epineux pour certains mais trés simple pour d'autres ,ceux a qui je me permet de leurs demander de nous éclairer de leurs lanternes.
j'utilise 3 tables paradox reliées en maitre_détail
table1 (table élèves) ayant les champs(( code_eleve , Num_cours, Num_seance)) qui est maitre pour table2.
table2(table des cours) ayant les champs ((code_eleve , Num_cours, Num_seance,valeur_cours)) détail pour table1 et maitre pour table3
table3(table des séances) ayant les champs ((code_eleve , Num_cours, Num_seance,versement_cours)) détail pour table2
voila le probleme : un élève peut prendre un cours (C1) d'une valeur( V ) choisie dans un dbloockup.
l'eleve fait des versements lors des séance.
lorsque je veut avoir le resultat de la difference entre ,ce que l'élève doit payer et ce qu'il a verser
j'utilise un tquery : select code_eleve,sum(versement_cours) -sum( valeur_cours) from table2 join table2 on table3.num_cours=table2.num_cours and
table3.num_seance=table2.num_seance
group by code_eleve
le resultat et parfait si l'eleve verse la totalité en un seul versement.
mais si l'élève fait des versements multiples pour le cours, j'obtient une duplication de la valeur du cours pour chaque versement suplementaire
c'est à dire si la valeur du cours est( V )et que l'eleve fait un versement unique de la totalité (A)qui est la valeur total c'est bon et donne A -V=0.
Mais si la valeur du cours est( V ) et que l'eleve fait des versements (A1 + A2+A3...) , au lieu d'obtenir (V - (A1+A2+A3..) )
il ya duplication de la valeur du cours pour chaque accompte ( et cela devient( V+V+V+..)-(A1+A2+A3).
ce que je veut avoir
la difference que doit payer l'eleve
1- pour chaque cours
2- pour tout les cours confondue et toute les seances confondue d'autre part
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 19 août 2007 à 20:01
Tout cela est un peu confus (je parle de la normalisation) et il faudrait respecter un minimum de formalisme dans la notation pour qu'on y voit clair rapidement (clés primaires soulignées, clés étrangères précédées du signe #).
D'autre part, je pense que la table "élèvesé essaie de remplir plusieurs rôles en comprenant à la fois les élèves et les les cours. Ce n'est pas très simple à gérer car plusieurs élèves peuvent suivre le même cours et il faudra alors dupliquer les cours et les séances. Je ne parle même pas d'une actualisation du prix des cours...
La relation maitre détail entre les trois tables ne semble donc pas être la réponse adaptée au problème posé.
Je verrais donc les choses de la façon suivante en décomposant en 4 tables:
table eleves(id_eleve, nom, prenom, ...);
table cours(Num_cours, Num_seance, titre, valeur_cours);
table inscriptions(id_inscription, #id_eleve, #num_cours, #num_seance);
table paiements(id_paiement, #id_inscription, date_paiement, montant_paiement);
La table inscriptions est alors une table de relation entre la table élèves et la table des cours.On pourrait se contenter d'utiliser les champs issus des tables élèves et cours pour composer la clé primaire mais cela aurait pour effet de compliquer les requêtes qui suivent.
En ce qui concerne la table des paiements, elle sera une table détail de la table inscriptions puisqu'un cours peut être réglé en une ou plusieurs fois.
Ainsi constituées, chaque table remplit un et un seul rôle.
Mise en oeuvre
Pour connaitre le montant restant à payer pour un éléve et pour l'ensemble des cours auxquels il est inscrit:
SELECT sum(c.valeur_cours) - sum(p.montant_paiement)
FROM paiements p, inscriptions i, cours c
WHERE p.id_inscription = i.id_inscription
AND i.id_eleve = "id de l'élève"
Pour connaitre le montant restant dû pour un élève pour un cours en particulier (sans jeu de mots ) :
SELECT sum(c.valeur_cours) - sum(p.montant_paiement)
FROM paiements p, inscriptions i, cours c, eleves e
WHERE p.id_inscription = i.id_inscription
AND i.id_eleve = "id de l'élève"
AND i.num_cours = "numéro du cours"
Pour connaitre le montant restant dû pour un éléve pour un cours et pour une séance particuliers :
SELECT sum(c.valeur_cours) - sum(p.montant_paiement)
FROM paiements p, inscriptions i, cours c, eleves e
WHERE p.id_inscription = i.id_inscription
AND i.id_eleve = "id de l'élève"
AND i.num_cours = "numéro du cours"
AND i.num_seance = "numéro de la séance".
NB : les valeurs entre guillemets doubles sont les paramètres variables des différentes requêtes. Quelques combobox bien placées et le tour est joué.
Voila, il reste à vérifier les dires, chose que je n'ai pas faite.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/