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

 MySQL Discussion :

Gestion Verrou avec VBA et ADO


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut Gestion Verrou avec VBA et ADO
    Bonjour,

    Je poste une bouteille à la mer pour avoir un coup de pouce sur le problème que je rencontre.

    Je suis en train de développer pour le bureau une petite application. Contexte technique :

    - écrans développés en VBA Access 2010 avec utilisation d'ADO pour accéder à la base
    - base de données MySql Serveur 5.7
    - utilisateur du connecteur ODBC 3.51 MySql.

    Je butte sur un problème de gestion de verrou.

    Sur un écran, j'ai un formulaire qui permet de modifier un enregistrement d'une table. Dans ma requête SQL je pose un verrou pour être certain que personne d'autre ne puisse modifier l'enregistrement en question en même temps. Voici la requête :

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set rstDep = New ADODB.Recordset
    rstDep.CursorLocation = adUseClient
    Conn.BeginTrans
    rstDep.Open ("SELECT * FROM D_DEPLACEMENT WHERE DEP_ID = '" & Form_F_DEPLACEMENT.Lst_Historique.Column(1, Form_F_DEPLACEMENT.Lst_Historique.ItemsSelected) & "' FOR UPDATE"), Conn

    Voici le code de connexion à la base de données :

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Conn = New ADODB.Connection
    Conn.Open "DRIVER={MySQL ODBC 3.51 Driver}" & ";SERVER=" & bdd_server & ";DATABASE= " & bdd_database & ";UID= " & bdd_user & ";PWD= " & bdd_password & ";OPTION=3"

    Ainsi, depuis le PC 1 je me positionne sur l'enregistrement à modifier, le verrou est posé. Là ça va.
    Sur le PC 2, je me positionne sur le même enregistrement et je tente une modification. Là, l'écran de l'application gèle car il tente de poser un verrou, mais comme il est déjà posé par le PC 1 il ne peut pas.
    Pour débloquer l'écran du PC 2, je dois annuler ou valider, donc faire sauter le verrou posé par le PC 1.

    Ma question : comment, je peux détecter que mon enregistrement est locké par un verrou quand je tente de le modifier depuis un autre écran ? J'ai vu sur le net la notion de Lock Delay dans les propriétés ODBC, le verrouillage pessismiste d'ADO ne me bloque par mon enregistrement et je peux enregistrer en même temps mon enregistrement depuis 2 PC différents.

    J'avoue que je suis un peu perdu, et de l'aide serait la bienvenue.

    Merci
    Jay

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Sous mysql, vous travaillez avec Innodb ou un autre moteur de stockage ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut winvsmac.

    Citation Envoyé par winvsmac
    Ainsi, depuis le PC 1 je me positionne sur l'enregistrement à modifier, le verrou est posé. Là ça va.
    Non, ça ne va pas. Vous ne devez pas bloquer la ligne avant de faire la saisie.

    Le traitement de votre ligne doit se faire en deux étapes.

    1) Vous lisez la ligne et vous stockez quelque part la colonne ou les colonnes que vous désirez modifier.
    Puis ensuite vous faites la saisie à l'écran de ce que vous désirez modifier.

    Dans cette étape, il n'y a aucun blocage. Pourquoi ?
    Car la saisie peut être très longue et de ce fait, vous risquez de bloquer d'autres utilisateurs qui auraient aussi la même intention que vous.
    Vous devez avoir en tête que le premier servie sera le premier à bloquer la ligne.
    Et ça, c'est l'étape suivante.

    2) Vous relisez la ligne en posant un verrou.
    Vous vérifiez par un simple test sous VBA si la ligne a été modifiée.
    C'est très simple à faire, puisque vous avez stocké les valeurs avant la saisie.

    Deux cas se présente :
    2-a) la ligne a été modifiée et donc vous devez recommencer la saisie.
    Pour ce faire, vous faites un ROLLBACK et vous recommencez votre saisie.

    2-b) la ligne n'a pas été modifié et vous faites la mise à jour.
    Pour terminer, vous faites un COMMIT pour valider la mise à jour.

    La deuxième temps est très rapide à l'inverse de la première qui peut être très longue.
    Dans votre façon de faire, vous aurez toujours un blocage car le temps de la saisie est trop long.

    En espérant que vous avez compris mes explications.

    @+

Discussions similaires

  1. [XL-2007] Jointure ADO avec VBA Sql
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2011, 11h03
  2. gestion de la liaison série avec VBA
    Par riquet90 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 11/08/2008, 18h30
  3. Gestion liste avec VBA
    Par ricki69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/04/2008, 00h43
  4. Gestion de micro coupures ADSL avec VBA
    Par Yohann_x dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/10/2007, 11h55
  5. Réponses: 13
    Dernier message: 28/11/2006, 09h40

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