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 :

Ouvrir une base de données en lecture seule [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut Ouvrir une base de données en lecture seule
    Bonjour à tous,

    Voilà, je fais une macro en Excel qui lance une application Access (d'où ce forum ), et j'aimerais que cette application Access m'ouvre une base de données (.mdb) mais en lecture seule

    Y a-t-il un moyen simple d'ouvrir la base en lecture seule ?
    Si vous avez le code directement en Access, je pense pouvoir me débrouiller pour le faire tourner sur Excel (à condition qu'il ne nécessite pas de références...)

    Merci de m'avoir lu

    Edit : quelques précisions : pour l'instant mon code d'ouverture de base ressemble à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccApp.OpenCurrentDatabase CheminDoss & "\" & NomFic, False
    mais OpenCurrentDatabase ne permet pas d'ouvrir en lecture seule (en tout cas je n'ai pas trouvé)

    Par contre, OpenDatabase le permet semble t-il, mais si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AccApp.DBEngine.WorkSpaces(0).OpenDatabase CheminDoss & "\" & NomFic, False, False
    La base n'apparait pas dans Access, et comme le code utilise CurrentDb pour la suite, ça ne marche pas...

    un peu paumé, sur le coup...

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Une solution en utilisant une fonction de l'API windows.
    L'idée est de créer une ligne de commande pour lancer Access et ouvrir la bdd avec le commutateur /ro (lecture-seule).

    Voici le code (Le plus simple est de tout coller dans un nouveau module de 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
    Option Explicit
     
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' Début Section Déclarations
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' *
    ' --------------------------------------------------------------
    ' Find Executable with FindExecutable
    ' --------------------------------------------------------------
    ' Codes erreurs renvoyés par FindExecutable
    Private Const SE_ERR_FNF As Long = 2        ' Fichier Non Trouvé
    Private Const SE_ERR_NOASSOC As Long = 31   ' Pas de programme associé
    Private Const SE_ERR_OOM As Long = 8        ' Plus de mémoire disponible
    ' FindExecutable renvoie une valeur > 32 en cas de succès
    ' Ne fonctionne qu'avec des fichiers existants
    Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
           (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
    ' *
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' Fin Section Déclarations
    ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    Sub OuvrirBdd(strBdd As String, Optional bReadonly As Boolean = False)
    Dim strAccessExe As String, lgRetVal As Long
    Dim strCmd As String
     
    strAccessExe = String(1024, vbNullChar)
    lgRetVal = FindExecutable(strBdd, "", strAccessExe)
    Select Case lgRetVal
        Case Is > 32
             strAccessExe = Left(strAccessExe, InStr(strAccessExe, vbNullChar) - 1)
             strCmd = """" & strAccessExe & """ """ & strBdd & """"
             If bReadonly Then strCmd = strCmd & " /ro"
             Shell strCmd, vbNormalFocus
        Case SE_ERR_FNF
             MsgBox "Fichier '" & strBdd & "' non trouvé"
        Case SE_ERR_NOASSOC
             MsgBox "Pas d'exécutable trouvé"
        Case SE_ERR_OOM
             MsgBox "Memoire insuffisante"
        Case Else
             MsgBox "FindExecutable a renvoyé le code d'erreur " & lgRetVal
    End Select
    End Sub
    La procédure à utiliser est OuvrirBdd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OuvrirBdd "C:\Mes Documents\Bdd.mdb", True
    A+

  3. #3
    Membre expérimenté
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 747
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour LedZeppII

    Décidément, tu es toujours là quand j'ai besoin d'aide

    Merci beaucoup, je garde le code dans ma besace...
    Mais si je maîtrise plus le VBA Excel que celui d'Access, je ne peux m'empêcher de penser que sur 2 produits Microsoft qui utilisent beaucoup VBA, il y en a un où les objets et commandes existantes sont assez facilement accessibles en VBA, et l'autre où quand on veut réaliser quelque chose qu'on trouve dans les menus on rame pas possible... quand même pénible, je trouve.

    Où vas-tu chercher toutes ces utilisations d'API ? tu es vraiment un chef, félicitations

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour LedZeppII
    Mais si je maîtrise plus le VBA Excel que celui d'Access, je ne peux m'empêcher de penser que sur 2 produits Microsoft qui utilisent beaucoup VBA, il y en a un où les objets et commandes existantes sont assez facilement accessibles en VBA, et l'autre où quand on veut réaliser quelque chose qu'on trouve dans les menus on rame pas possible... quand même pénible, je trouve.
    Je suis d'accord.
    Le modèle objet d'Excel est plus riche que celui d'Access, en ce qui concerne la reproduction en VBA, des actions réalisées via l'interface utilisateur.

    Citation Envoyé par tototiti2008 Voir le message
    Où vas-tu chercher toutes ces utilisations d'API ?
    Ici : Windows Development
    J'y ai passé de très nombreuses heures, et c'est pour ça que des fois je fais lien entre une question posée sur le forum et quelque chose que j'ai vu là.

    A+

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/03/2007, 12h22
  2. base de donnée en lecture seule
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/02/2007, 16h14
  3. Impossible d'ouvrir une base de donnée
    Par anna1 dans le forum Access
    Réponses: 2
    Dernier message: 03/05/2006, 22h55
  4. Impossible de fermer une base de données en lecture
    Par requiemforadream dans le forum ASP
    Réponses: 7
    Dernier message: 21/04/2005, 16h58

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