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 oeuvrePour 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 !
Pensez à cliquer sur
Réponse acceptée lorsque la réponse vous convient.
