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 :

Connaitre le nom et le chemin d'une base Access ouverte


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Connaitre le nom et le chemin d'une base Access ouverte
    Bonjour à tous

    Voilà donc mon petit soucis.

    Sur mon post je peux avoir plusieurs base Access d'ouvertes, ce que je souhaite c'est lister celles-ci.

    Je sais comment récupérer les processus ouverts (c'est dans la FAQ), mais cela signale qu'Access est ouvert, et non le fichier .mdb qui est ouvert dans Access et son chemin, c'est cela qui m’intéresse.

    Merci à ceux qui pourront m'apporter de l'aide.

    Philippe

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    Mes essais Avec Access 2007, 3 BDs ouvertes, j'obtiens bien les chemins et les noms des BDs.
    Un peu tiré par les cheveux, mais opérationnel.
    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
    Private Sub Command1_Click()
        Dim svc As Object
        Dim sQuery As String
        Dim oproc
     
        Dim Msg As String
        Dim MsgChemBDs As String
        Dim MsgBDs As String
        Dim TxtRech As String
     
        On Error GoTo Command1_Click_Error
     
        Set svc = GetObject("winmgmts:root\cimv2")
        sQuery = "select * from win32_process"
        For Each oproc In svc.execquery(sQuery)
            'Debug.Print oproc.Name & " = " & oproc.ExecutablePath
            If InStr(1, oproc.Name, "MSACCESS.EXE", vbTextCompare) <> 0 Then
                Msg = Trim(oproc.CommandLine)
                Msg = Replace(Msg, Chr(34), "")
                Msg = Replace(Msg, "]", "")
     
                MsgBDs = Right(Msg, Len(Msg) - InStrRev(Msg, "\"))
     
                TxtRech = "ShellOpenDatabase "
                If InStr(1, Msg, TxtRech, vbTextCompare) Then
                    MsgChemBDs = Right(Msg, (Len(Msg) - (InStrRev(Msg, TxtRech) + Len(TxtRech)) + 1))
                    Else
                    TxtRech = "NOSTARTUP "
                    MsgChemBDs = Right(Msg, (Len(Msg) - (InStrRev(Msg, TxtRech) + Len(TxtRech)) + 1))
                End If
                Debug.Print "Chemin de la BDs: " & MsgChemBDs
                Debug.Print "BDs:  " & MsgBDs
            End If
        Next
        Set svc = Nothing
        Exit Sub
     
    Command1_Click_Error:
        MsgBox "Error " & Err.Number & " (" & Err.Description & ")"
        Err.Clear
    End Sub
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci Francis

    Je testerais cela ce soir, et je te ferais mon retour.

    c'est quoi le type de oproc ?

    Philippe

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    j'ai repris le code de la FAC, le fait est que cette variable n'est pas typé, mais avec Dim oproc As Object pas de problèmes.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    le fait est que cette variable n'est pas typé,
    Ce que je déteste, que je fasses du VB6, du Access, du Excel, la déclaration des variables et le typage est obligatoire pour moi

    Je regarde ce soir, il n'y a rien d'intéressant à la télé

  6. #6
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    ..........
    Je regarde ce soir, il n'y a rien d'intéressant à la télé



    Je viens de regarder, il manque la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                MsgChemBDs = Left(MsgChemBDs, Len(MsgChemBDs) - Len(MsgBDs) - 1)
    pour avoir le chemin sans le nom de la BDs.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Ce que je déteste, que je fasses du VB6, du Access, du Excel, la déclaration des variables et le typage est obligatoire pour moi

    Je regarde ce soir, il n'y a rien d'intéressant à la télé
    Ben, ce n'est pas parce que le typage n'est pas obligatoire qu'on est obligé de s'en passer
    d'autant qu'il est facile de l'identifier - le non typage est juste une "facilité" pour l'utilisateur lambda
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .../...    Set svc = GetObject("winmgmts:root\cimv2")
    Debug.Print TypeName(svc)   ' => SWbemServicesEx
    et la référence correspondante
    «Microsoft WMI Scripting V.1.2 Library» (wbemdisp.tlb)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bon je coince

    J'ai essayé avec un GetObject pour récupérer Access, à partir de là j'aurais le chemin du projet, mais

    Philippe

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Effectivement tu auras le chemin complet avec database.name
    mais avec getobject tu n'auras que la 1ère instance ouverte.

    Il faut lister toutes les instances avec getrunningobjecttable
    mais c'est lourd.
    Bon courage.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut à tous

    Bon je vous avoues que je sèche sur ce truc, j'ai trouvé un autre palliatif, c'est la création d'un complément Access qui sera donc accessible dans toutes les bases, et c'est même plus simple.

    Merci à tous de votre aide.

    Philippe

  11. #11
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    A l'occasion, quand j'aurais le temps, j'y reviendrais.
    Désolé de ne pouvoir m'y investir plus pour l'instant
    mais c'est assez lourd à développer.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re

    Citation Envoyé par DarkVader Voir le message
    mais c'est assez lourd à développer.
    Je m'en doute, comme c'est une petite application qui doit être utilisée pour plusieurs bases Access, le complément est le plus simple.

    Mais si tu trouves la solution je testerais sans soucis, et cela peut-être utile à d'autres.

    Philippe

  13. #13
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    A l'occasion, quand j'aurais le temps, j'y reviendrais.
    Désolé de ne pouvoir m'y investir plus pour l'instant
    mais c'est assez lourd à développer.
    Ben c'est le moment lol

    Comme déjà dit précédemment, GetObject ne retourne que la 1ère instance trouvée ce qui est très limitant
    d'autant que GetObject devrait être appelé systématiquement avant chaque appel à CreateObject
    afin de vérifier si l'instance a créer n'est pas déjà ouverte.

    Voilà donc GetObjects de la librairie VB6i qui a le mérite de retourner TOUTES LES INSTANCES. Il suffira ensuite de faire le tri.
    Outre que c'est beaucoup moins lourd que la solution WMI qui est un pieux, cela retourne l'object Application.

    Un exemple avec des instances Excel, lancez 2 instances séparées de Excel (ou autre) et ouvrez plusieurs classeurs dans chaque instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub F_Load()
        Dim xlObj() As Object, oWorkbook As Object, x As Long, sRet As String
     
        For x = 1 To GetObjects("Excel.Application", xlObj())
            For Each oWorkbook In xlObj(x).Workbooks
                sRet = sRet & IIf(sRet <> "", vbCrLf, "") & x & vbTab & oWorkbook.Name
            Next
        Next
     
    Debug.Print sRet
    End Sub

  14. #14
    Invité
    Invité(e)
    Par défaut
    Salut

    Merci pour ce retour qui pourrait servir à d'autres, mais je suis passé à un complément sur Access qui fonctionne parfaitement.

    Philippe

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Heu une solution a adapter
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Salut

    Merci pour ce retour qui pourrait servir à d'autres, mais je suis passé à un complément sur Access qui fonctionne parfaitement.

    Philippe
    Bonjour phillipe
    Regarde dans les contributions mon getobject pour les sessions d'internet explorer peu etre que tu pourrais l'adapter a acces
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Comment connaitre le nom et l'ip d'une machine en perl ?
    Par djibril dans le forum Téléchargez
    Réponses: 0
    Dernier message: 31/05/2011, 19h07
  2. Réponses: 3
    Dernier message: 17/07/2009, 15h47
  3. connaitre le nom du jour à partir d'une date
    Par com486 dans le forum Firebird
    Réponses: 4
    Dernier message: 18/05/2009, 11h27
  4. Réponses: 2
    Dernier message: 06/04/2007, 11h48

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