Re: Doublon dans la table ress

Bonjour,

Je poursuis mes investigations.

Ce qui est étrange c'est que les doublons ne soient présents que dans cette table de mon coté.

Et du vôtre ?


Bonjour,

Ce n'est pas une correction du pb : je n'ai toujours pas pu pointer l'origine de ces doublons.
En attendant, je propose des "gardes fou" dans la base.
Lorsqu'on essaie d'ajouter un lien dans la table ressources_groupes_etudiants, le "trigger" s'assure que ce lien n'est pas déjà présent.
Afin de surveiller ce qu'il se passe, un message d'erreur est stocké dans une table que j'appelle "erreurs".

Voici les scripts :

DROP TABLE IF EXISTS `erreurs`;
CREATE TABLE `erreurs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dateModif` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`erreur` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

DROP TRIGGER IF EXISTS `unicite_appartenance_groupe`;

CREATE TRIGGER `unicite_appartenance_groupe`
BEFORE INSERT
ON `ressources_groupes_etudiants`
FOR EACH ROW BEGIN
IF EXISTS (
SELECT *
FROM ressources_groupes_etudiants
WHERE ressources_groupes_etudiants.deleted = 0 AND ressources_groupes_etudiants.codeGroupe = NEW.codeGroupe AND ressources_groupes_etudiants.codeEtudiant = NEW.codeEtudiant
)
THEN INSERT INTO erreurs (erreur) VALUES ( CONCAT(
'Erreur [',
CONVERT(NEW.codeProprietaire,CHAR),
']: tentative d ajout de l etudiant (', CONVERT(NEW.codeEtudiant,CHAR), ') dans le groupe ', CONVERT(NEW.codeGroupe,CHAR),'). Ce lien existe déjà.'));
END IF;
END;

J'ai également ajouté une surveillance sur les dates des séances et des réservations.
Chez nous on a parfois une date 0000-00-00 qui entraine des erreurs.
Voici les scripts :

CREATE TRIGGER `dates_seances`
BEFORE INSERT
ON `seances`
FOR EACH ROW BEGIN
IF EXISTS (
SELECT *
FROM `seances`
WHERE NEW.dateSeance = '0000-00-00'
)
THEN INSERT INTO erreurs (erreur) VALUES ( CONCAT( 'Erreur [', CONVERT(NEW.codeProprietaire,CHAR), ']: tentative d utilisation de la date 0000-00-00 dans une seance.'));
END IF;
END;

DROP TRIGGER IF EXISTS `dates_reservations`;

CREATE TRIGGER `dates_reservations`
BEFORE INSERT
ON `reservations`
FOR EACH ROW BEGIN
IF EXISTS (
SELECT *
FROM `seances`
WHERE NEW.dateReservation = '0000-00-00'
)
THEN INSERT INTO erreurs (erreur) VALUES ( CONCAT( 'Erreur [', CONVERT(NEW.codeProprietaire,CHAR), ']: tentative d utilisation de la date 0000-00-00 dans une reservation.'));
END IF;
END;

Sylvain


Sujet écrit par sylvain le samedi 2 octobre 2021 à 12:03

[ Imprimer ] - [ Fermer la fenêtre ]