Se connecter / S'enregistrer
Votre question

SQL - Trigger - Select - Multi-access

Tags :
  • Select
  • Sql
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
20 Septembre 2012 09:35:35

Bonjour,

Ma config :

J'ai une base MySQL avec des tables qui peuvent être vu par plusieurs utilisateurs simultanément, rien de bien sorcié.
Les différents utilisateurs peuvent éditer les champs en même temps, c'est à dire cliquer sur le bouton éditer, faire leurs modifications et envoyer.
Problème : Si deux personne modifient le même champ, alors seulement la modification du dernier sera prise en compte, les deux biensur seront prises en compte, mais le dernier écrasera les modifications des précédent...

Je me demandais donc s'il n'était pas possible d'empecher qu'un utilisateur ouvre en édition le même champ qu'un autre. Du coup j'aurai quand même multi-access à la table, mais les champs serais bloqués.

J'ai pensé aux Triggers, mais sa affichera une erreur de MAJ (lors de l'application : Insert, Update,...) et n’effectura pas la mise à jour.
Celà me derrange car l'utilisateur qui aura pris le temps de remplir les champs se verra alors frustré de devori recommencer...

Y-a-t-il une possibilité d'empecher un Select ou Edit sur un champ si quelqu'un l'a déjà ouvert ?

J'ai aussi pensé à une table temporaire, dans laquelle je stockerais les champs ouverts... Avec par exemple des Triggers sur Select (impossible parait-il). Ainsi si quelqu'un fait un Select sur un enregistrement mon trigger écrit dans ma table que le champ ID x est dejà ouvert part user Y.
Ainsi avant un autre SELECT ou Edit ou Update ou autre, je parcours ma table voir si un l'enregistrement n'est pas déjà ouvert.
Mais du coup il me faudra une sortte timeout d'ouverture, pour éviter qu'une personne qui soit parti boire un café, ou en week-end bloque l'enregistrement...

Pensez-vous que cette solution est viable ? Avez-vous d'autres idées ?

Merci de votre aide !

Autres pages sur : sql trigger select multi access

a b L Programmation
28 Septembre 2012 22:27:24

Tu peux appliquer le principe du Mutex:
1. Tu peux, par exemple, ajouter une colonne EN_MODIFICATION, que tu mets à 1 lorsque quelqu'un commence une modification. Puis, tu le remets à 0 à la validation.
2. Tu empêches les éditions des lignes dont le champ EN_MODIFICATION est à 1, en affichant un message indiquant qu'un autre utilisateur modifie ce champ.

Enfin, tu peux remplacer la valeur 0/1 par le nom d'utilisateur, comme ça, tu connais le vilain utilisateur qui verrouille la ligne. ;) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS