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 :

références d'une base [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 965
    Points : 1 158
    Points
    1 158
    Par défaut références d'une base
    Bonjour à tous,

    Je manipule mal l'objet "Application" et me trouve devant un problème que je n'arrive pas à résoudre.

    Je souhaite supprimer une références d'une base depuis une autre et en recréer une autre dynamiquement sans ouvrir la seconde base.
    Est-ce possible?

    J'ai essayé avec la méthode OpenDatabase mais ne trouve pas la collection References de l'objet Application dans les membres disponibles.

    Il semble que ce soit possible avec la méthode cCreateObject puis OpenCurrentDatabase, mais je ne souhaiterais pas instancier la nouvelle BD pour modifier ses références.

    Pensez-vous que cela soit possible?

  2. #2
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 965
    Points : 1 158
    Points
    1 158
    Par défaut références d'une base
    Bonjour,

    Toujours à la recherche d'une solution pour supprimer certaines références d'une base depuis une autre (en l’occurrence des bibliothèques accdb), pour pouvoir les recréer ensuite avec le bon chemin. Ce cas de figure intervient lorsque les références (dans mon cas) sont dans le chemin racine de l'appli et que j'installe une copie de ce dossier avec un nom différent. La nouvelle base créée garde les références du chemin de la première installation: c'est pourquoi j'aimerais les recréer dynamiquement.

    J'ai trouvé une méthode qui, basiquement, travaille directement dans la base lancée et qui recrée inconditionnellement ces références au démarrage en utilisant CurrentProject.Path.

    Pour simplifier, il s'agit d'un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                'Référence Trouvée dans T_VRD
                If Dir(chemRacine & RefFound) <> "" Then  ' …Et dans chemin Racine
                    Application.References.Remove Ref
                    Application.References.AddFromFile (chemRacine & RefFound)
                End If
    Lorsque je veux tracer ce code en mettant un point d'arrêt, J'ai le message:
    Impossible d'entrer en mode arrêt maintenant.
    Du coup, impossible, vue la gestion d'erreur de savoir si le code s'est bien exécuté.

    J'aimerais pouvoir effectuer cette opération depuis une autre application mais l'objet "Application" faisant référence à l'appli en cours, je n'arrive pas à trouver un objet Bd qui contiendrait le membre "References" pour y appliquer les méthodes "Remove" et "AddFromFile".

    Auriez-vous une idée pour l'une ou l'autre solution?

    Merci d'avance...

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 391
    Points : 19 816
    Points
    19 816
    Billets dans le blog
    66
    Par défaut
    Bonjour,

    Je crois que le mieux c'est de mettre à jour les références sur ouverture des bases.

    Sinon concernant le membre references de l'objet application, comme tu dis je ne vois rien d'autre que OpenCurrentDatabase.

    Par exemple pour remplacer la référence Outlook
    d'une base de données "Database1.accdb" située dans le même dossier que la base active, je ferais :

    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
        Dim appAccess As Object
        Dim Ref As Reference
        Dim chemin As String
     
        Set appAccess = CreateObject("Access.Application")
     
        appAccess.Visible = False ' masque 
        chemin = CurrentProject.Path & "\Database1.accdb"
     
        appAccess.OpenCurrentDatabase chemin
     
        For Each Ref In appAccess.References
            If Ref.Name = "Outlook" Then
                appAccess.References.Remove Ref
                appAccess.References.addfromfile...
                ...
            End If
        Next Ref
     
        ...
     
        Set appAccess = Nothing
    Mais comme tu dis ça implique d'ouvrir chaque base

    Cdlt,

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne suis pas certain d'avoir compris! disons que tu as un application qui utilise Outlook. et bien tu supprime définitivement la référence à Outlook!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Maileur as object
    set Maileur = creatobect("Outlook.Application")
    Par exemple:

  5. #5
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 965
    Points : 1 158
    Points
    1 158
    Par défaut références d'une base
    Bonjour dysorthographie et user, et merci de votre intérêt pour mon problème partiellement résolu mais pour ma gouverne je reste sur ma faim concernant une méthode que j'aurais aimé implémenter,

    Je suis dans le cas suivant: j'ai un jeu de plusieurs frontaux disponibles dans un dossier racine de l'appli.
    Une de ces bases sert de "lanceur" par ligne de commande avec des switchs divers (/CMD, ...)
    Lorsque j'appelle un des frontaux cela se fait tjrs par le lancement de ce lanceur qui interprète sa ligne de commande (Command() ) et lance le frontal désiré.
    Lorsque que je copie le Dossier racine "A" qui contient ts les frontaux ainsi que les bibliothèques de références (en accdb) , dans un dossier "B" le lanceur gère toutes les liaisons dynamiques mais les frontaux qu'il contient pointent sur les bibliothèques du dossier "A" .
    J'ai trouvé une côte mal taillée en agissant du côté des frontaux au démarrage et en utilisant CurrentProject.Path + le nom des bibliothèques: çà se passe en 2 temps: je "remove" les anciennes références et je "AddFromFile" les nouvelles dans le bon dossier.

    Tout çà fonctionne maintenant (depuis 03:00 ce matin!)

    Mais j'avais émis hier le désir de bouger ces références avant lancement d'un frontal depuis le lanceur en faisant un OpenDatabase dans le WorkSpace du lanceur: le problème c'est que l'objet "Application" qui pointe sur le lanceur (bien sûr) n'existe pas dans cette base frontale ouverte et encore moins son membre "References" re-
    Du coup je me demandais si c'était seulement possible.

    J'espère avoir été clair , je reste à ta dispo pour plus de renseignements.

  6. #6
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Points : 2 491
    Points
    2 491
    Par défaut
    Bonjour à tous, et j'espère que j'ai compris la problématique; en tout cas je ne réponds ici qu'à la partie "pointer vers la bonne bibliothèque au départ de la frontale". Voici ce que j'utilise comme code pour cela:
    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
    54
    55
    56
    57
    58
    Sub RelinkTables()    'RelinkTables
     
        Dim dbs As Database
        Dim tbl As TableDef
        Dim Tdfs As TableDefs
        Dim NewPathname As String
     
        Dim choix As String
     
        Set dbs = CurrentDb
        Set Tdfs = dbs.TableDefs
     
        Screen.MousePointer = 11
     
        choix = InputBox("Enter the drive letter 'C', 'T' or 'H':", "Directory Selection", "h") 'Les 10 lignes ci-dessous sont modifiables (automatisables) à volonté.
        Select Case UCase(choix)
            Case "H"
                GoTo Err_Mngt
                NewPathname = "H:\My Documents\Interview Tool\MDB\Master Interview Planning data_V2.6.accdb"
            Case "T"
                GoTo Err_Mngt
                NewPathname = "T:\Development\Master Interview Planning data_V2.6.accdb"
            Case "C"
                NewPathname = "C:\Users\jakan\OneDrive\Documents\MS_OFFICE\ACCESS\Master Interview Planning.accdb"
            Case Else
                MsgBox "Wrong input! Enter the drive letter 'C', 'T' or 'H'"
                Exit Sub
        End Select
     
        Set dbs = CurrentDb
        Set Tdfs = dbs.TableDefs
     
        Screen.MousePointer = 11
     
        'Loop through the tables collection
        On Error Resume Next
        j = 0
        For Each tbl In Tdfs
    '        If tbl.SourceTableName <> "" Then 'If the table source is other than a base table
                tbl.Connect = ";DATABASE=" & NewPathname 'Set the new source
                tbl.RefreshLink 'Refresh the link
                j = j + 1
    '        End If
        Next 'Goto next table
        Screen.MousePointer = 0
        MsgBox j & " tables have been successfully relinked to the database on " _
        & NewPathname & vbCrLf & vbCrLf & " Thank you...", vbInformation, "Tables Reinked"
     
    Err_Mngt_Exit:
        Set dbs = Nothing
        Set Tdfs = Nothing
        Exit Sub
     
    Err_Mngt:
        MsgBox "This path does not exist !", vbOKOnly, "Path selection"
        Resume Err_Mngt_Exit
     
    End Sub

  7. #7
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 965
    Points : 1 158
    Points
    1 158
    Par défaut références d'une base
    Bonjour Zekraoui_Jakani, et merci de ta réponse.

    Si j'ai bien compris ton bout de code, il permet de rafraîchir les liens vers les tables attachées d'une bd.

    Mon problème consiste à rafraîchir les liens vers les références VBA d'une BD (bibliothèques de code dans des bd séparées).

    Merci encore

  8. #8
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Points : 2 491
    Points
    2 491
    Par défaut
    J'ai trouve un exemple sur "https://stackoverflow.com/questions/20685507/how-to-modify-reference-to-adodb-of-another-access-2010-database-using-vba"; j'espère que ça pourra aider :-)

    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
    Sub CreateDB()
    Dim acApp As Access.Application
    Dim dppath As String
     
        dbpath = "z:\docs\newmsmdb.mdb"
        ''http://msdn.microsoft.com/en-us/library/office/ff835033.aspx
        CreateDatabase dbpath, dbLangGeneral, dbVersion40
     
        ''http://msdn.microsoft.com/en-us/library/office/aa140509(v=office.10).aspx
        Set acApp = New Access.Application
        With acApp
            .OpenCurrentDatabase dbpath
            acApp.References.AddFromFile _
                 "c:\program files\common files\system\ado\msado15.dll"
        End With
    End Sub

  9. #9
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 965
    Points : 1 158
    Points
    1 158
    Par défaut références d'une base
    Merci Zekraoui_Jakani

    Je regarde çà et reviens vers le forum.

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

Discussions similaires

  1. [MySQL] recherche référence dans une base de donnée
    Par IVIedia dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/10/2016, 10h24
  2. Réponses: 3
    Dernier message: 28/04/2008, 17h15
  3. Activation et suppression de références dans une autre base
    Par Steph38GRE dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/02/2007, 10h34
  4. Pb avec les références d'une base de données
    Par Celia1303 dans le forum Access
    Réponses: 8
    Dernier message: 01/12/2005, 15h44

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