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

VB 6 et antérieur Discussion :

Pb lecture simultanée sur un enregistremnt


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Pb lecture simultanée sur un enregistremnt
    Bonjour,

    J'ai un pb avec la lecture d'un enregistrement dans une table
    access 97.
    Voila dans mon application, lorsque je valide une vente, je vais chercher dans une table le dernier N° de reglement puis j'enregistre ma vente et j'incremente de 1 mon N° de reglement.Tout ca se passe dans une transaction.
    Le Pb se passe lorque 2 postes valident en meme temps ou presque. Les 2 postes récupèrent le meme N° de reglement.

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Bonjour Tony44,

    Tu as au moins deux solutions pour résoudre ton problème :

    Blocage de la table contenant le numéro :
    Le temps de créer ton nouvel enregistrement (avec ton nouveau numéro) tu bloque la table concernée.
    Le blocage doit te permettre de lire le dernier numéro et d'ajouter l'enregistrement. Ensuite tu débloque la table.
    Ensuite à toi de gérer l'erreur éventuelle si un autre poste essai de faire le même blocage pour, lui aussi, ajouter un enregistrement avec un nouveau numéro.

    Utilisation de compteurs automatique
    Si ce numéro est uniquement à usage interne (dans ton code) ou si la valeur d'importe peu. Tu peux utiliser les compteurs automatiques. Dans ce cas, c'est Access qui ce charge de fournir le numéro et qui gère le blocage.


    Maintenant, tout cela c'est de la théorie et je ne pourrais pas t'en dire plus car cela fait trop longtemps que je n'ai plus travaillé avec Access.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    merci pour ta reponse.

    Je vais effectivement bloquer la table. J'ai lu plusieurs articles sur les forums.
    Kel est selon toi la meilleure solution?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur VB6 et tout neuf en .Net
    Inscrit en
    Avril 2005
    Messages
    377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VB6 et tout neuf en .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 377
    Points : 446
    Points
    446
    Par défaut
    Pour moi la solution la plus simple est le compteur automatique.

    Le blocage est plus compliqué à gérer. Il faut que, partout où tu utilise la table bloquée, tu gère le blocage éventuel.
    Maintenant, peut-être que quelqu'un d'autre a une solution simple pour le blocage.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    je ne peux pas travailler avec les compteurs automatiques car je le N° ke je récupère est un n° de reglement (C donc un N° tres important car les N° de reglement doivent se suivre dans les logiciels de vente). de plus bloquer la table est possible car la table est tres peu utilisé et ne comporte qu'un seul enregistrement.
    Je reste quand meme ouvert a tout autre proposition et je te remercie encore pour ton aide.

  6. #6
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Bonjour,
    dans la série "comment faire autrement", fais une application client serveur avec des sockets.
    Dans ce cas c'est la partie serveur (unique) qui te donne le numéro d'enregistrement et éventuellement gère l'accès à la base pour les mise à jour. Les clients au lieu de mettre à jour directement la table se connectent sur le serveur et lui envoient les info de ventes. Le serveur gere une file d'attente des demandes.

    Sinon les solutions par access:
    - soit déclarer ton champ N° de reglement en index sans doublons, enregistrement avec transaction, la récupération d 'erreur doit te permettre de détecter les doublons, dans ce cas, tu ressayes en redemandant un nouveau numéro
    - soit ajouter dans la table qui gère le dernier numéro courant, des champs qui servent de sémaphore. Puis faire une requete où le poste "reserve" le numéro s'il n'est pas déjà reservé, après vérifier que c'est bien le poste qui à la reservation courante, faire les maj, puis liberer la reservation en mettant à jour le numéro. L'utilisation des transaction est conseillé.

    Dans tous les cas, je te conseille de tester ta solution en écrivant un petit programme de test qui génère des nouvelles ventes très souvent (toutes les secondes) et de le lancer plusieurs fois sur plusieurs postes. Tu verras vite tous les problèmes, notamment de lock (fréquent avec access 97), apparaitre et la robustesse de ta solution.

    Une question: pour vous, bloquer la table, cela veut dire "ouverture en accès exclusif" ?

  7. #7
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Bonjour,
    autre solution (bien plus simple, enfin je crois),
    Declarer le champ en compteur auto
    faire un addnew avec un numéro de session Unique que tu as généré (genre compose basé sur le poste, l'utilisateur et la date),
    puis rechercher l'enregistrement sur le numéro de session pour récupérer le numéro de commande.
    Comme cela tu ne bloque pas la table et tu as des numéros uniques et séquentiels.

  8. #8
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    j'ai peut être une autre solution, une table reservée aux compteurs.
    aussitot que l'on veut acceder a un compteur, on fait une methode edit
    , ce qui verouille jusqu'a l'update

Discussions similaires

  1. [Perl] lecture/écriture simultanées sur une socket
    Par sephiburp dans le forum Programmation et administration système
    Réponses: 10
    Dernier message: 16/10/2007, 11h25
  2. [File] Ecriture / Lecture simultanée sur un fichier
    Par kij dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 21/07/2007, 19h11
  3. Réponses: 2
    Dernier message: 29/09/2004, 10h07
  4. Réponses: 7
    Dernier message: 08/03/2004, 16h30
  5. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 21h20

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