Comparer deux colonnes de sa base de donnée avec Qt

Signaler
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021
-
Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021
-
Bonjour à vous,

Je me permets de vous déranger quelques instants car je rencontre un petit soucis avec mon programme actuellement.

Je dois créer une interface de réservation de salle, dans laquelle le professeur aura la possibilité de choisir une date, une heure la classe etc comme vous pouvez le voir ci-dessous.


Bon pour l'instant l'IHM n'est pas encore terminé, l'esthétique viendra par la suite.

Enfin bon, une fois que j'ai terminé d'envoyer mes différentes requêtes, les valeurs s'affichent comme ça


J'aimerai savoir si l'un d'entre vous pourrais m'indiquer de quelle façon je dois procéder pour créer un code me permettant de comparer deux lignes de ma table, pour éviter que deux professeurs réservent pour le même jour et la même heure.

Je vous remercie d'avance

1 réponse

Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021
7 570
Bonjour,

Il faudrait pour cela que tu nous donnes la description de la table des réservations.

Et sur le fonctionnement, ce que l'on comprend, il n'y a qu'une seule salle, on réserve 1 jour et 1 heure (10-11, 14-15) ? puisque nous ne voyons pas le contenu des listes de valeur.

Ça c'est si tu programmes le sql dans ton interface.

Tu pourrais aussi mettre une clé unique sur jour/heure ce qui ferait que l'insertion à une date déjà prise échouerait, en testant le code retour tu pourrais envoyer un message "plage déjà réservée, choisissez en une autre".
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021

Bonjour, merci de votre réactivité !

alors la table ressemble à ça


Oui pour l'instant je fais uniquement le fonctionnement avec une salle de classe, mais quand je réussirai à ce qu'un professeur ne puisse pas réserver pour le même jour et la même heure, je pense que je pourrai me débrouiller il faudra rajouter une condition supplémentaire.

Et sur le fonctionnement, ce que l'on comprend, il n'y a qu'une seule salle, on réserve 1 jour et 1 heure (10-11, 14-15) ? puisque nous ne voyons pas le contenu des listes de valeur.


Oui c'est bien ça !

Le professeur choisi dans le menu déroulant des valeurs que j'ai prédéfini :



J'ai utilisé HeidiSQL pour créer ma base de donnée.

Une clé unique c'est une claire primaire ?
Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021
7 570 >
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021

Clé unique n'est pas clé primaire : https://waytolearnx.com/2018/07/difference-entre-cle-primaire-et-cle-unique.html

Mais dans ton cas tu pourrais faire de jour_reservation/heure_réservation la clé primaire, qui par nature est unique. Et donc l'insertion d'une même réservation echouera avec un code erreur.

Après que veux-tu/peux-tu faire dans ton interface ?

select "occupé" where jour_saisie=jour_reservation and heure_saisie=heure_réservation 

te diras si la plage est libre ou occupée.

NB : pas grave pour un exercice, mais dans une véritable application, jamais on n'utiliserait un champ texte contenant ce couple "heure debut - heure fin", on utiliserait 2 champs de type time, heure début, heure fin
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021
>
Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021

Merci bien ,dorénavant je saurai différencier une clé unique d'une clé primaire !

une clé primaire ne peut qu'être utilisé une seule fois et ne peut pas inclure de valeur NULL tandis que la clé unique peut avoir une valeur NULL.

Désolé si je vous pose plusieurs questions je maitrise mal ( ça se voit ) les bases de donnée.

Mais dans ton cas tu pourrais faire de jour_reservation/heure_réservation la clé primaire, qui par nature est unique. Et donc l'insertion d'une même réservation echouera avec un code erreur.
La clé primaire ne peut être utilisé qu'une seule fois, donc je vois pas comment je peux l'associer au jour et à l'heure simultanément.

Dans mon interface je dois pouvoir réserver un créneau horaire unique, comme tu l'as compris plus haut.

J'ai pas très bien compris le code, le where est une condition c'est bien ça ?
"occupé" c'est le message qui va s'afficher si deux valeurs sont identiques ?

J'ai pas répondu au bon commentaire, la fatigue tout ça
Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021
7 570 >
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021

Une clé primaire ce n'est pas nécessairement UN champ, ce peut être un couple de champ, ou plus n champs. Mais c'était une remarque judicieuse, preuve que tu as tout lu et essayé de comprendre.

"je maitrise mal ( ça se voit ) les bases de donnée." oui en effet si en sql tu demandes ce que c'est le WHERE, il faut que tu apprennes les bases du langage.

Le soucis c'est comment intégrer tout cela dans ton framework si tout se passe dedans, là je n'ai aucune idée.
Messages postés
31626
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
19 avril 2021
7 570 >
Messages postés
3
Date d'inscription
vendredi 2 avril 2021
Statut
Membre
Dernière intervention
2 avril 2021

Tu devrais essayer sur ta table un
ALTER TABLE reservation_prof
ADD PRIMARY KEY(jour_reservation,heure_reservation);

et voir comment se comporte l'application quand tu insères un doublon