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

VBA Access Discussion :

DAO -> ADO = gros problème pour tester le verrouillage d'enregistrement. HELP !


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2009
    Messages : 145
    Points : 75
    Points
    75
    Par défaut DAO -> ADO = gros problème pour tester le verrouillage d'enregistrement. HELP !
    Bonjour à tous,

    Il y a 6 mois j'ai migré une base de donnée Access 97 vers Access 2010.

    Le plus dur à été de passer de DAO à ADO, mais j'y suis arrivé.

    Ma base de données Access 2010 sert d'application frontale (installée sur des PC avec Win XP), le moteur de base de données étant celui de Sql Anywhere 6 de Sybase installé sur un serveur Windows 2003.

    L'application frontale Access 2010 est en production depuis 2 mois et tout fonctionne bien dans un environnement multi utilisateur.

    Seulement je n'étais pas encore tombé sur un test de verrouillage aprés un rs.MoveNext et la j'ai un gros soucis pour tester si l'enregistrement est verrouillé ou pas

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
        Dim enr As ADODB.Recordset
        Dim rtn As Long
        Dim requete As String
     
        requete = "select * from dba.devise order by dv_code"
        ' ouverture du recordset en mode IO pour modification de tous les enregistrements
        rtn = enreg_open(enr, requete)
        Do
            Debug.Print enr!dv_code
            rtn = enreg_next(enr)
        Loop Until enr.eof
        rtn = enreg_close(enr)
     
    Function enreg_open(enr As ADODB.Recordset, requete As String) As Long
        Dim statelock As Long
     
        enreg_open = False
        ' Lecture avec test de verrouillage
        enr.CursorLocation = adUseServer
        enr.Open requete, vg_connexion, adOpenDynamic, adLockPessimistic, adCmdText
        ' test verrouillage
        statelock = enr.EditMode
        Exit Function
    err_open:
        ' enregistrement non verrouillé
        If err.Number = 3021 Then Resume Next
        ' enregistrement verrouillé par Sybase
        if err.number= -2147467259 then
          ' on ferme et on réouvre pour retester le verrouillage
          enr.Close
          enr.Open requete, vg_connexion, adOpenDynamic, adLockPessimistic, adCmdText
          ' le resume ramène sur la ligne statelock = enr.EditMode
          Resume
        end if
    End Function
     
    Function enreg_next(enr As ADODB.Recordset) As Boolean
     
        enreg_next = False
        On Error GoTo err_next
     
        ' lecture enregistrement suivant
        enr.MoveNext
     
        Exit Function
    ' gestion des erreurs
    err_next:
         if err.number=-2147467259 then
            ' boucle jusqu'a ce que l'enregistrement verrouillé soit libéré
            Resume
         end if
    End Function
    Avant de lancer ma procédure, je vais sur un autre poste modifier un enregistrement de la table devise et donc le verrouille pour le test.

    La boucle enr.MoveNext fonctionne jusqu'a cet enregistrement la.

    L'erreur est déclanchée sur la ligne enr.MoveNext (qui est verrouillée par ailleurs) et la main est passée à la gestion d'erreur err_next
    Le resume ramène sur enr.MoveNext, mais il n'y a plus de code erreur et le MoveNext m'a fait passer à l'enregistrement suivant au lieu de rester bloqué sur l'enregistrement verrouillé !

    Tout ceci fonctionnait très bien avec DAO, mais ne fonctionne plus maintenant.

    L'autre différence entre DAO et ADO lors de l ouverture d'un recordset est :
    Avec DAO l'erreur était déclanchée par : enr.Open requete, vg_connexion, adOpenDynamic, adLockPessimistic, adCmdText

    Alors qu'avec ADO elle l'est avec : statelock = enr.EditMode

    J'ai pu adapter cette fonction et la faire fonctionner, mais je coince sur MoveNext, car je ne sais pas si le problème vient de ADO ou de Sybase...

    Merci d'avance de votre aide, ça fait une semaine que je suis dessus et je sèche

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2009
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Personne n'a une idée ou utilise une base de données autre que celle d'Access 2010 ?

    Pour faire simple :
    Mon 1er appel à enr.MoveNext sur le fameux enregistrement verrouillé me génère une erreur exploitable, qui me permet de faire une boucle tant que celui ci est verrouillé.

    Au 2ième appel, dans ma boucle donc, le enr.MoveNext ne me génère plus d'erreur et saute l'enregistrement verrouillé pour aller au suivant, ce qui est franchement embétant.

    Sous Access 97 et DAO je n'avais aucun soucis avec Sybase ASA 6, maintenant que je suis passé à Access 2010 et ADO oui, pourtant je suis toujours avec la même base de données ASA 6.

    Merci pour vos réponses.

Discussions similaires

  1. Problème pour tester des pages ASP
    Par said394 dans le forum ASP
    Réponses: 2
    Dernier message: 16/12/2007, 00h29
  2. Gros problème pour installer PostGreSql
    Par j4nnot dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 25/05/2007, 10h26
  3. [AJAX] Restaurer l'état de listes liées par Ajax
    Par vallica dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/10/2006, 13h36
  4. Erreur 404 - problème pour tester la page jsp
    Par zuzuu dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 05/07/2006, 16h55
  5. Gros problème pour lire une vidéo
    Par zoidy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/06/2006, 12h35

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