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

Access Discussion :

Accès simultanés : bloquer la lecture d'une table


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 274
    Points : 192
    Points
    192
    Par défaut Accès simultanés : bloquer la lecture d'une table
    Bonjour,

    Nous travaillons sur un projet dans lequel nous avons 8 machines de production qui accèdent à une base de données ACCESS.
    Le processus est le suivant :
    1. la machine accède au dernier enregistrement, lit un id et crée un enregistrement avec l'id suivant.
    2. après avoir fait son traitement, l'enregistrement est modifié en fonction des résultats.

    Comme 8 machine font ce travail en même temps, nous ne voulons pas que le même id soit récupéré (ce n'est pas un champs automatique) 2 fois. Est-il donc possible de bloquer la lecture de la table aux autres machines durant le temps où une machine est en train de lire et de créer l'id suivant ?

    Merci pour votre aide !

    Steve

  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 : 40
    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
    Le moyen le plus fiable aurait quand même était d'utiliser un numéro automatique pour la gestion de la clé primaire

  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 274
    Points : 192
    Points
    192
    Par défaut
    Effectivement,

    mais le problème est que ce numéro est utilisé par nos programmateurs pour identifier les moteurs qu'ils programment et nous devons impérativement respecter un ordre suivi d'identifiants.
    Dans le cas où il y a une erreur, cet identifiant est repris lors de la lecture des données. Si on avait un id automatique, les enregistrement "loupés" génereraient des sauts dans les numéros des moteurs.
    J'espère que je suis assez clair...

    Y'a-t-il donc dans notre cas une possibilité de blocage ?

    Merci beaucoup !
    Steve

  4. #4
    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 : 40
    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 vois pas comment faire si ce n'est stocker un champ Oui/Non nommé EnCours dans une table nommée Action et de vérifier avant de mettre à jour les données la valeur de ce champ. S'il est à oui, indiquer de patienter, une fois libéré, fixer le champ à oui, valider les données et libérer le champ. Soucis, si deux accès se font exactement en même temps, ça n'ira pas

  5. #5
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    Malheureusement Access ne supporte pas les transactions !!
    le plus simple à mon avis :
    - créer l'id automatique comme même (mais qui sera pûrement technique)
    - récupérer cet id (soit 200 par exemple)
    - faire une requête sur l'id automatique 199 et récupérer l'id réel
    - l'incrémenter de 1 (s'il n'est pas vide) et mettre à jour la ligne 200

    bon, c'est juste une idée, mais il faudra faire beaucoup de tests !!

    [EDIT] : l'idée de Tofalu semble plus logique peut être mais comme il a dit, tu auras certainement des cas trés particulier !
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  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 : 40
    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
    Citation Envoyé par Morsi
    Malheureusement Access ne supporte pas les transactions !!
    le plus simple à mon avis :
    - créer l'id automatique comme même (mais qui sera pûrement technique)
    - récupérer cet id (soit 200 par exemple)
    - faire une requête sur l'id automatique 199 et récupérer l'id réel
    - l'incrémenter de 1 (s'il n'est pas vide) et mettre à jour la ligne 200

    bon, c'est juste une idée, mais il faudra faire beaucoup de tests !!

    [EDIT] : l'idée de Tofalu semble plus logique peut être mais comme il a dit, tu auras certainement des cas trés particulier !
    Je pense cependant que ton idée est meilleure morsi, c'est à cela que je pensais justement dans mon premier message en indiquant d'utiliser un numauto à tout prix. L'avantage de cette méthode est qu'à aucun moment l'intégrité des données n'est mise en jeu. Au pire si ça plante un controle d'erreur aprés la mise à jour saura recalculer le numéro du moteur

  7. #7
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 274
    Points : 192
    Points
    192
    Par défaut
    Merci pour vos idées, nous allons en discuter et faire des tests.

    Pour l'instant je mets donc ce sujet à Résolu en attendant de voir arriver les résultats

    Steve

  8. #8
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 274
    Points : 192
    Points
    192
    Par défaut
    Encore une question, même si ça a rien à voir avec Access mais nous avons l'idée de passer la base de données de Access à MySql.
    Est-ce que ce serait plus facile à gérer ce problème avec MySql ?

    Steve

  9. #9
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    Passer avec une base MySql et des pages web pour gérer tout ça ???

    oui peut être qu'au niveau web, il y a la gestion de la concurrence d'accés !!

    sinon forum Mysql
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  10. #10
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    je reviens sur ce sujet par ce qu'il y a a priori une solution que je n'ai pas vu

    http://access.developpez.com/faq/?pa...table_exclusif
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  11. #11
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 274
    Points : 192
    Points
    192
    Par défaut
    Un grand merci pour cette info !

    Salutations

    Steve

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Morsi Voir le message
    Malheureusement Access ne supporte pas les transactions !!
    le plus simple à mon avis :
    - créer l'id automatique comme même (mais qui sera pûrement technique)
    - récupérer cet id (soit 200 par exemple)
    - faire une requête sur l'id automatique 199 et récupérer l'id réel
    - l'incrémenter de 1 (s'il n'est pas vide) et mettre à jour la ligne 200

    bon, c'est juste une idée, mais il faudra faire beaucoup de tests !!

    [EDIT] : l'idée de Tofalu semble plus logique peut être mais comme il a dit, tu auras certainement des cas trés particulier !
    Pas mal comme idée mais regarde ce cas :
    Si Machine M1 & Machine M2 font ça en même temps, on risquerait d'avoir :
    ¤ M1 inscrit un enregistrement avec id auto = 200 et id réel non défini pour le moment
    ¤ M2 inscrit un enregistrement avec id auto = 201 et id réel non défini pour le moment
    ¤ Ensuite, si pas de bol, la requête de mis à jour de M2 passera avant celle de M1 et on obtiendra :
    Recupération de l'id réel de l'enregistrement 200 : (vide), là on a prévu le coup et on regarde celui d'en dessous, récupération de l'id réel de l'enregistrement 199 : 1234 (par exemple), on ajoute + 1 et on inscrit 1235 comme id réel de l'enregistrement d'id auto 201
    ¤ Enfin, M1 fait la même chose, récupère l'id réelle de l'enregistrement 199, soit 1234, l'incrémente aussi de 1 et obtient le même id réel que l'enregistrement 201, donc 1235.
    M1 et M2 on inscrit chacune un enregistrement qui se retrouve avec le même id réel.

    Donc à voir si ce phénomène peut arriver, à la rigueur augmenter le numéro du nombre de saut effectué pour trouver un enregistrement ayant une id réelle + 1. Ca nous donnerait dans l'exemple ci-dessus à l'étape 3 un id réel de 1234 +2 soit 1236 et ensuite en étape 4 M1 mets à jour en ajoutant juste + 1 et obtiendra bien 1235.


    (Le lien donné dans le dernier post ne pointe sur rien, aller sur http://access.developpez.com/faq/?pa...table_exclusif dorénavant)

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Via un accès ADO ou DAO, il y a moyen de gérer les transactions, ou je dis une grosse co**?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Monitoring - Nombre d'acces en lecture sur une table
    Par hazou dans le forum Administration et Installation
    Réponses: 3
    Dernier message: 13/11/2012, 16h45
  2. Probleme de lecture d'une table
    Par Slaash0 dans le forum Access
    Réponses: 4
    Dernier message: 02/04/2007, 15h00
  3. [VB + ADO]Probléme de lecture d'une table
    Par FlynuxS dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/06/2006, 11h58
  4. Réponses: 2
    Dernier message: 16/05/2006, 15h17
  5. Lecture d'une table html
    Par kodo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/05/2006, 14h51

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