IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Application Web et verrouillage d'enregistrement


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut Application Web et verrouillage d'enregistrement
    Bonjour,
    Je développe une application de gestion assez importante en mode Web (Php + ExtJs) qui stocke ses données dans une base SqlServer 2008.

    Mon problème est donc le vérrouillage d'un (ou plusieurs d'ailleurs !) enregistrement(s).

    Quand un utilisateur modifie la fiche d'un client, il faut que personne d'autre ne puisse y accéder, jusque là rien d'exceptionnel.
    La difficulté c'est qu'en mode Web on est déconnecté de la base tant qu'on n'a pas cliqué sur 'Valider'.

    Pour l'instant j'utilise une table 'Verrou' ou je crée un enregistrement (avec un index unique) ou je stocke l'IdUtilisateur, le nom de la table et l'Id de l'enregistrement modifié, ça marche bien mais je trouve ça un peu lourd.

    Y aurait-il une solution plus élégante ?

    Merci si vous avez eu le courage de tout lire !

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Points : 586
    Points
    586
    Par défaut
    Il s'agit d’empêcher la modification d'une ligne entre le moment ou elle est lue et le moment ou elle est écrite ? Ou juste d'éviter les erreur d'accès concurrentielles ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Donpi Voir le message
    Il s'agit d’empêcher la modification d'une ligne entre le moment ou elle est lue et le moment ou elle est écrite ? Ou juste d'éviter les erreur d'accès concurrentielles ?
    Les deux !

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Cela peut être dangereux comme approche.

    Rendez-vous bien compte qu'un utilisateur pourrait ouvrir un "enregistrement" en édition et ensuite fermer l'application.

    Il serait peut-être plus efficace de conserver et comparer un numéro de version pour indiquer quand il y a eu changement entre l'ouverture et la sauvegarde.

    Sinon il vous faut au moins utiliser un keep alive (en ajax par exemple), et vous n'auriez qu'à exploiter un champ "locked" BIT.
    Alors lors que vous voulez ouvrir un enregistrement en édition, vous en lisez le contenu comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE <table>
    SET locked = 1
    OUTPUT inserted.*
    WHERE locked = 0
    AND <clauses where supplémentaires>
    Si 0 lignes, c'est que l'enregistrement n'existe pas ou est bloqué.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Cela peut être dangereux comme approche.

    Rendez-vous bien compte qu'un utilisateur pourrait ouvrir un "enregistrement" en édition et ensuite fermer l'application.

    Il serait peut-être plus efficace de conserver et comparer un numéro de version pour indiquer quand il y a eu changement entre l'ouverture et la sauvegarde.

    Sinon il vous faut au moins utiliser un keep alive (en ajax par exemple), et vous n'auriez qu'à exploiter un champ "locked" BIT.
    Alors lors que vous voulez ouvrir un enregistrement en édition, vous en lisez le contenu comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE <table>
    SET locked = 1
    OUTPUT inserted.*
    WHERE locked = 0
    AND <clauses where supplémentaires>
    Si 0 lignes, c'est que l'enregistrement n'existe pas ou est bloqué.
    Ah, ça c'est une solution qui me seduit !
    Je ne connaissais pas la clause OUTPUT

    Qu'est ce qu'un keep alive exactement ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par edblv Voir le message
    Ah, ça c'est une solution qui me seduit !
    Je ne connaissais pas la clause OUTPUT

    Qu'est ce qu'un keep alive exactement ?
    Depuis l'application (le navigateur web dans ce cas-ci), vous émettez périodiquement des requêtes vers le serveur afin d'indiquer que l'application est toujours en cours d'utilisation.

    Genre toutes les 10 secondes : http://monsite/keepalive.php
    Si après une certain temps (plus de 10 secondes) vous n'avez plus eu de message, vous pouvez considérez que le client est fermé/inaccessible et vous pouvez alors libérer l'enregistrement.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 121
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Sergejack Voir le message
    Depuis l'application (le navigateur web dans ce cas-ci), vous émettez périodiquement des requêtes vers le serveur afin d'indiquer que l'application est toujours en cours d'utilisation.

    Genre toutes les 10 secondes : http://monsite/keepalive.php
    Si après une certain temps (plus de 10 secondes) vous n'avez plus eu de message, vous pouvez considérez que le client est fermé/inaccessible et vous pouvez alors libérer l'enregistrement.
    Ok, ça doit charger un peu le réseau quand même...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par edblv Voir le message
    Ok, ça doit charger un peu le réseau quand même...
    Oui mais c'est ça ou devoir faire help desk pour répondre "Appartement quelqu'un a ouvert une fiche et à quitter sans refermer"

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 0
    Dernier message: 19/08/2014, 10h28
  3. Réponses: 13
    Dernier message: 23/05/2008, 17h41
  4. Debuggage d'une application WEB-TOMCAT
    Par oziller dans le forum JBuilder
    Réponses: 3
    Dernier message: 07/02/2003, 23h10
  5. Réponses: 4
    Dernier message: 04/07/2002, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo