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 :

[VBA DAO] CurrentDB et Lock


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut [VBA DAO] CurrentDB et Lock
    Bonjour,

    J'ai un problème d'autorisation que j'ai du mal à comprendre.

    Dans un module standard, j'ai une fonction qui me permet d'importer les données dans la nouvelle structure. Sauf qu'une fois la fonction fcnImportData exécuté une fois, je ne peux plus enregistrer les modifications apportées au module. J'obtiens le message suivant :

    "Vous n'avez pas les autorisations nécessaires pour accéder à la base de données. Si vous faites des modifications, elles ne pourront pas être enregistrées."

    Pour continuer à coder, je dois réouvrir tout mon projet. C'est la ligne CurrentDB qui place un lock quelconque sur ma base actuelle, y compris, probablement, le module standard sur lequel je travaille. Ce que j'ai dû mal à comprendre, c'est pourquoi ce lock n'est-il pas levé à la fermeture/libération de m_dbOld?

    Merci!


    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
    Public Function fncImportData()
     
        'Initialiser les variables globales
        On Error GoTo ErrGestionOpenDb
            Set m_dbOld = OpenDatabase(CurrentProject.Path & "\" & m_cstrOldDatabasePath, True, True)
        On Error GoTo 0
     
        Set m_dbCurrent = CurrentDb
     
    '    'Suprimer les données de tests   'EN COMMENTAIRE JUSTE POUR TESTER
    '    fncDeleteAll
    '
    '    'Importer les données
    '    fncImportComputers
    '    fncImportMonitors
    '    fncImportPrinters
    '    fncImportUsers
    '    fncImportEmail
     
    ExitFunction:
        m_dbOld.Close
        m_dbCurrent.Close
        Set m_dbOld = Nothing
        Set m_dbCurrent = Nothing
        Exit Function
     
    ErrGestionOpenDb:
        Select Case err.Number
            Case 3024
                MsgBox "La base de données est introuvable. Emplacement attendu: «" & CurrentProject.Path & "\" & m_cstrOldDatabasePath & "»"
            Case 3356
                MsgBox "La base de données est déjà ouverte. Veuillez la fermer et relancer l'importation." & vbCrLf & vbCrLf & CurrentProject.Path & "\" & m_cstrOldDatabasePath
            Case Else   'Erreur non gérée
                err.Raise err.Number
        End Select
        Resume ExitFunction
    End Function
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Comment as tu déclaré tes variable
    m_dbOld et m_dbCurrent?
    Amicalement

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Const m_cstrOldDatabasePath As String = "Data.mdb"
    Private m_dbOld As DAO.Database
    Private m_dbCurrent as DAO.Database
    J'ai tenté de les déclarer en local et de passer la variable aux fonctions (celles mise en commentaires) mais ça fait la même chose. Remarque, je ne m'attendais pas à ce que ça règle le problème mais un moment donné, on essaie n'importe quoi.

    J'ai essayé aussi avec DoCmd.RunCommand, en utilisant plus du tout CurrentDB. Je n'ai plus le problème mais alors, je dois mettre DoCmd.SetWarning False et je me prive d'informations que j'ai besoin (CurrentDB.Execute est plus pratique pour ça, avec son option arrêt sur erreur).

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Salut, ton code est bien propre et DEVRAIT fonctionner ;-).

    J'essayerai de remplacer CurrentDB par CodeDB pour voir.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par marot_r
    Salut, ton code est bien propre et DEVRAIT fonctionner ;-).

    J'essayerai de remplacer CurrentDB par CodeDB pour voir.

    A+
    Merci Marot.
    Le code fonctionne. Le hic, c'est qu'après que le code ait été exécuté une fois, mon module est bloqué. Dès que j'essaie de le modifier, j'obtiens le message "Vous n'avez pas les autorisations..." et je dois complètement fermer et réouvrir Access pour "lever" le lock. Je n'arrive pas à m'expliquer pourquoi ça fait ça.

    J'obtiens le même message avec CodeDB.
    Je vais essayer de repartir en neuf à partir d'un nouveau module, en ajoutant le code quelques lignes à la fois.

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Caroline1
    Je vais essayer de repartir en neuf à partir d'un nouveau module, en ajoutant le code quelques lignes à la fois.
    Toujours la même chose :-/
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 166
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par Caroline1
    Je vais essayer de repartir en neuf à partir d'un nouveau module, en ajoutant le code quelques lignes à la fois.
    Citation Envoyé par Caroline1
    Toujours la même chose :-/
    Voilà, le problème ne se produit plus.

    L'essai précédent, j'avais fait un copie/coller. Là, j'ai retenté mais en tapant le code à la main. J'ai commencé par juste une ligne de base : déclaration d'une variable DAO.Database + Set = CurrentDb + un Execute. Voyant que c'était ok, j'ai copié mon module problèmatique, collé le tout dans notepad, copié le code de notepad et recollé dans un nouveau module. Exécution F5... et je peux encore modifier et enregistrer mon module par après.

    Le fichier original devait être corrompu quelque part. Je ne vois pas trop comment expliquer ce drôle de comportement autrement.

    Caroline
    N'oubliez pas le tag . En haut: Outils de la discussion -> Résolu.

  8. #8
    Futur Membre du Club Avatar de Sal-Proven
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Caroline1 Voir le message
    Voilà, le problème ne se produit plus.

    L'essai précédent, j'avais fait un copie/coller. Là, j'ai retenté mais en tapant le code à la main. J'ai commencé par juste une ligne de base : déclaration d'une variable DAO.Database + Set = CurrentDb + un Execute. Voyant que c'était ok, j'ai copié mon module problèmatique, collé le tout dans notepad, copié le code de notepad et recollé dans un nouveau module. Exécution F5... et je peux encore modifier et enregistrer mon module par après.

    Le fichier original devait être corrompu quelque part. Je ne vois pas trop comment expliquer ce drôle de comportement autrement.

    Caroline
    Je ne sais pas si tu viens encore sur ce forum Caroline1, mais j'avais le même problème que j'essayais de résoudre depuis 3 h et je n'y arrivais pas jusqu'à ce que je trouve ton post ici. J'ai fait comme toi (copier / collé du code dans Notepad et retour dans VB) et ça marche !
    C'est ça que je trouve génial dans le Web. Un inconnu explique comment il a résolu un problème et 15 ans après c'est utile à un autre ! Génial
    En tout cas, si jamais tu vois ce message tu as un grand merci de ma part

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

Discussions similaires

  1. [VBA][DAO]MoveFirst qui renvoie n'importe où...
    Par lola06 dans le forum VBA Access
    Réponses: 17
    Dernier message: 04/05/2007, 14h29
  2. [VBA DAO] methode sur recordset
    Par ip203 dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/04/2007, 12h20
  3. [VBA][DAO] Update via Delete + Add : Astuces ?
    Par philou22 dans le forum Access
    Réponses: 11
    Dernier message: 22/02/2007, 11h47
  4. VBA - DAO - recherche dans un recordset
    Par Sebimpro dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/07/2006, 08h48
  5. [VBA DAO] faire un commit d'une table
    Par Reloadx dans le forum Access
    Réponses: 5
    Dernier message: 28/03/2006, 08h18

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