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

Sécurité Discussion :

Conception de base : accès concurrents


Sujet :

Sécurité

  1. #1
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut Conception de base : accès concurrents
    Bonjour,

    Je réalise une base qui fonctionne comme un compteur : les utilisateurs ont simplement une interface pour ajouter ou soustraire.
    Comme il s'agit d'un stock, la valeur ne devrait evidemment jamais arriver sous 0.

    Je procède en gros actuellement comme ceci pour un retrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    txtDispo.Requery
    If txtDispo > 0 Then
    DoCmd.RunSQL "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite
    Else
    Msgbox "Le stock n'est pas suffisant"
    End If
    Mais imaginons que mon stock soit à 1 et qu'un autre utilisateur fasse un retrait entre le moment ou je rafraichis mon formulaire et le moment ou je fais ma requete, je vais me retrouver à -1.

    J'avais pensé faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite  & "AND Dispo > 0"
    Mais comment savoir que l'UPDATE n'a pas été effectué pour avertir l'utilisateur que son retrait n'a pas été possible ?

    Merci de votre aide.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dans ce cas, il faut utiliser DAO

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Db as dao.Database
    Set Db=Currentdb
    Db.Execute "UPDATE tblStock set Dispo = Dispo - 1 WHERE IdSite = " & IdSite  & "AND Dispo > 0"
    If Db.RecordsAffected=0 Then Msgbox "Pas mis à jour"

  3. #3
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    il faudrait que tu crée une table connection utilisateur et si un utilisateur est déjà connecté tu empeche la mise à jour et tu affiche une msgbox

    je dévelloppe

    tu n'a qu'a mettre une variable à 1 lorsque l'utilisateur est connecté et puis si cette variable est à 1 tu affiche imppossible de mettre à jour la base

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Merci pour vos réponses.
    Ce forum est vraiment excellent.

    Dans le cas de "Db.RecordsAffected", est-ce que je suis sur de compter la requete de mon utilisateur ou est-ce que je risque de compter la requete d'un utilisateur ayant fait une requete entre temps ?

    (mais non je ne suis pas traumatisé par les accès simultanés).

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Ce qui est possible, c'est d'enregistrer les lignes d'ajout ou de soustraction.
    De cette manière, tu garde une sorte de journal, ou d'historique et en cas de problème, il devient possible de faire un refresh ou requery de tes données.

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je préfère ma solution

    Dans le cas de "Db.RecordsAffected", est-ce que je suis sur de compter la requete de mon utilisateur ou est-ce que je risque de compter la requete d'un utilisateur ayant fait une requete entre temps ?
    Ca s'applique à l'objet Database de la session du poste client.

    Donc, ça répond bien à ton cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/09/2012, 06h13
  2. [Conception] Gestion d'accès concurrent
    Par youcef81 dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2007, 11h58
  3. [Oracle] Accès concurrent à une base de données
    Par schniouf dans le forum JDBC
    Réponses: 8
    Dernier message: 29/09/2006, 16h10
  4. Recherche Livre / Conseils sur la conception de Base
    Par Yeuma dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 02/01/2004, 14h25
  5. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31

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