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

Runtime Discussion :

Définition des chemins dans le Runtime [AC-2003]


Sujet :

Runtime

  1. #1
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 263
    Points : 182
    Points
    182
    Par défaut Définition des chemins dans le Runtime
    Bonjour,

    Toujours dans la perspective d'un redéploiement d'une application avec la formule Runtime (2007 ou 2010 ?), j'ai déjà pu obtenir de la part de Misters (que je remercie au passage) des informations agrémentées de copies d'écran qui m'ont bien guidé.

    Toutefois, je souhaiterais que vous me confirmiez que la procédure d'implantation des bases au niveau des différents clients se définit de cette façon !..

    Après avoir empaqueté vos applications, vous les transmettez aux différents clients qui les extraient dans un répertoire (défini lors de l'empaquetage ?..).

    Ensuite, si l'intégration des bases frontales au niveau des postes des différents utilisateurs ne pose pas (à priori !..) de problèmes, il en est pas de même avec la base dorsale.

    En effet, celle-ci, qui doit être positionnée sur le serveur, sera installée en fonction de la configuration system du client soit sur le lecteur G, ou V, ou J, etc... (je n'évoque pas les répertoires et les sous-répertoires !.)

    La solution que j'évoque ci-dessous est subordonnée à l'hypothèse que l'on puisse déplacer, bien entendu, la base dorsale.

    L'administrateur local implante la base dorsale sur la destination physique de son choix.
    Ensuite, lors de l'initialisation de l'application, il précise dans les paramètres le chemin de la base dorsale . (Tester avec VBA si le chemin existe et qu'il est accessible).
    Puis, toujours avec VBA, et à l'aide du paramètre du chemin préalablement saisi, il lie au niveau des bases frontales les tables figurant dans la base dorsale; (Tester si les bases sont liées avec VBA)

    Pouvez-vous me confirmer que le "chemin" de ma réflexion est celui qu'il faut emprunter ?

    Merci à l'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    La difficulté réside dans le fait que tu ne connais pas à l'avance le serveur cible et donc son lecteur.
    D'ores et déjà, il ne faut jamais spécifier un chemin par la lettre du lecteur (dans un cas comme le tiens) mais plutôt en convention UNC à savoir :
    \\ServerName\Path\Database.mdb

    Du peu que j'ai compris, tu délivres ton appli à différents clients qui n'ont rien à voir les uns avec les autres donc tu es contraint de prévoir dans ton appli un processus de "Première utilisation" qui vise à configurer ton appli face à l'implantation de la base dorsale et ainsi, rattacher automatiquement les tables. Tu dois prévoir par ailleurs un module d'évolution au cas ou le serveur changerait (d'où la notion UNC) de lettre de lecteur.

    Cela peut se faire soit dans une table dédiée et affectée comme table "système" soit dans un fichier de paramètres (tonAppliName.ini)...

    Une grosse réflexion s'impose car tu n'as pas le droit à l'erreur dans l'assistant configuration que tu vas devoir mettre en place.

    Moi aussi je me suis bien amusé un jour passé...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonsoir à tous,

    comme Argy (), j'ai été confronté à ce type de problème (dire que je me suis amusé serait exagéré !!).

    J'ai résolu le problème par une table et un formulaire qui, au lancement de l'appli, venait vérifier que les tables liées étaient bien présentes dans le chemin indiqué. Dans le cas contraire, un formulaire s'ouvrait, permettant de recréer le lien.

    Il existe une discussion sur le sujet (je n'ai plus le chemin en mémoire, mais une petite recherche devrait être facile).

    J'ai trouvé ici : http://www.developpez.net/forums/d47...s-accessibles/

    Sinon ça sera un plaisir d'aider cluster26 (ou les intéressés !)

    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  4. #4
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 263
    Points : 182
    Points
    182
    Par défaut
    Bonsoir!..

    Merci à tous deux !..

    Votre façon de voir les choses conforte ma réflexion !..

    Dans l'application que j'ai déjà développée, j'ai créé un formulaire qui s'appuie sur une petite table et qui s'ouvre au premier démarrage.

    Plusieurs champs doivent être obligatoirement servis : identification, mail, nom du responsable, etc... Je vais donc ajouté un champ qui recueillera le nom du chemin en convention UNC.

    Ensuite, liaison des tables !..

    Par la suite, à chaque ouverture de base frontale, test de l'existence de la base dorsale dans le bon chemin.

    Dans une hypothèse négative, l'application propose à nouveau le formulaire paramètres à la modification.

    Encore merci.

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par cluster26 Voir le message
    Par la suite, à chaque ouverture de base frontale, test de l'existence de la base dorsale dans le bon chemin.
    Attention !

    Cela doit se faire aussi à la première utilisation.
    L'idéal reste la selection du fichier via un GetOpenFilename() qui une fois sélectionné assure que la base existe bien à l'endroit supposé et d'une, et de deux transformer ce chemin en UNC via une fonction idoine...

    Allez je me fends d'un peu 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
    Public Function GetUNCPath(ByVal DriveLetter As String) As String
    Const ERROR_BAD_DEVICE                       As Long = 1200&
    Const ERROR_CONNECTION_UNAVAIL               As Long = 1201&
    Const ERROR_EXTENDED_ERROR                   As Long = 1208&
    Const ERROR_MORE_DATA                        As Long = 234
    Const ERROR_NOT_SUPPORTED                    As Long = 50&
    Const ERROR_NO_NET_OR_BAD_PATH               As Long = 1203&
    Const ERROR_NO_NETWORK                       As Long = 1222&
    Const ERROR_NOT_CONNECTED                    As Long = 2250&
    Const NO_ERROR                               As Long = 0
     
    Dim strMessage                               As String
    Dim strRemoteName                            As String
    Dim strLocalName                             As String
    Dim lngReturn                                As Long
    Dim lngRemoteName                            As Long
     
        strLocalName = DriveLetter
        strRemoteName = String$(255, Chr$(32))
        lngRemoteName = Len(strRemoteName)
        lngReturn = apiWNetGetConnection(strLocalName, strRemoteName, lngRemoteName)
     
        Select Case lngReturn
            Case ERROR_BAD_DEVICE: strMessage = "Error: Bad Device"
            Case ERROR_CONNECTION_UNAVAIL: strMessage = "Error: Connection Un-Available"
            Case ERROR_EXTENDED_ERROR: strMessage = "Error: Extended Error"
            Case ERROR_MORE_DATA: strMessage = "Error: More Data"
            Case ERROR_NOT_SUPPORTED: strMessage = "Error: Feature not Supported"
            Case ERROR_NO_NET_OR_BAD_PATH: strMessage = "Error: No Network Available or Bad Path"
            Case ERROR_NO_NETWORK: strMessage = "Error: No Network Available"
            Case ERROR_NOT_CONNECTED: strMessage = "Error: Not Connected"
            Case NO_ERROR: strMessage = vbNullString
        End Select
     
        If Len(strMessage) Then
            GetUNCPath = strMessage
        Else
            GetUNCPath = Left$(strRemoteName, lngRemoteName)
        End If
    End Function
    Et la déclaration qui s'impose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function apiWNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal LocalName As String, ByVal RemoteName As String, cbRemoteName As Long) As Long
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 263
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    Merci pour ce code qui va m'être très utile.

    Toutefois, je l'ai testé très, très rapidement (je n'ai pas été au fond des choses) , mais à la compilation, j'ai un blocage au niveau de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lngReturn = apiWNetGetConnection(strLocalName, strRemoteName, lngRemoteName)
    Le blocage s'effectue sur la syntaxe apiWNetGetConnection.

    N'étant pas assez expérimenté, je n'ai pas la solution. !..

    Pour tout avouer, je m'était lancé dans une procédure (très simple par rapport à ce que tu me présentes !...) reprise sur le site !

    La voici :

    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
    Public Function existeFileFSO(ByVal fichier As String) As Boolean
    ' test si un fichier existe !
    Set fs = CreateObject("Scripting.FileSystemObject")
    fichier = Forms![Formulaire1]![nom_chemin]
     
     
     
    existeFileFSO = fs.FileExists(fichier)
    If existeFileFSO = False Then
     
     
      msg = "LA BASE DORSALE N'EST PAS DANS LE BON REPERTOIRE !....."
            réponse = MsgBox(msg, DéfBd2, Titre)
             Exit Function
            Else
       msg = "LA BASE DORSALE est DANS LE BON REPERTOIRE !....."
            réponse = MsgBox(msg, DéfBd2, Titre)
     
            End If
    'retourne vrai si exite
    Set fs = Nothing
    End Function
    Encore merci

  7. #7
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 263
    Points : 182
    Points
    182
    Par défaut
    Rebonjour.

    Je viens de m'apercevoir que j'ai carrément mis de côté la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function apiWNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal LocalName As String, ByVal RemoteName As String, cbRemoteName As Long) As Long
    Avec mes excuses et encore merci.

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Hum, tu mélanges un peu tout et tu manques de pratique...

    1. Ta fonction doit rester générique (de par son nom que tu lui a affecté).
    2. Soit clair dans tes déclarations
    3. Evite l'usage des Forms![Formulaire1]![nom_chemin] dans une fonction telle que celle-ci qui est censée être partagée et donc dans un module...
    4. Met un Option Explicit en haut de chaque page de module coche l'option appropriée dans les options de VBE

    Ta fonction doit se résumer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function FichierExiste(ByVal NomFichier As String) As Boolean
        On Error Resume Next 'Evite l'erreur 429
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        FichierExiste = oFSO.FileExists(NomFichier)
        Set oFSO = Nothing
    End Function
    Mais si tu avais utilisé comme préconisé un GetOpenFilename() (voir les code source de ce forum), tu n'aurais pas eu à écrire cette fonction... puisque c'est l'utilisateur qui sélectionne lui-même sa base depuis la boîte de dialogue Ouvrir de cette API.

    Bref dans l'ordre tu devrais avoir un déroulement du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strUNCPathBaseDorsale = GetUNCPath(Left$(strCheminhFichierBaseDorsale, 2))
    strCheminBaseDorsale = strUNCPathBaseDorsale & Mid$(strUNCPathBaseDorsale, 3)
    Call RattacherTables(strCheminBaseDorsale)
    RattacherTables() est une fonction qui attache les tables (avec tout ce qu'il faut dedans et notamment la suppression de toutes tables liées présente dans les deux bases dorsale et frontale)

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Membre habitué Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 263
    Points : 182
    Points
    182
    Par défaut
    Merci pour ces nouvelles (et complexes) explications !..

    J'ai les méninges qui ont bouillonnées pas mal mais j'ai pigé !...

    De ce fait, je revois certaines parties du code que j'avais développé et pour lequel l'aspect rationnel va être amplement amélioré.

    Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bonjour, je suis dans la meme situation que cluster26, c'est a dire que je chercher a optimiser le deploiement de mon application sur des postes clients.
    J'ai bien compris la logique, mais je ne sais pas, une fois le fichier dorsale selectionner, comment ecrire mon script VBA pour mettre a jour mes liens.
    Auriez vous un exemple de code à me montrer histoire de me mettre sur la piste svp ?

    Merci à tous

  11. #11
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    C'est dans ton application que tu dois régir la présence des tables liées et donc la disponibilité du fichier sur le serveur.
    Une gestion d'erreur coiffe le tout et si l'erreur 3044 survient, c'est que tu as une rupture réseau.

    Cette même erreur peut très bien proposer à l'utilisateur d'aller chercher le fichier de la base dorsale manuellement si il en a les droits
    Sinon, l'application peut aussi lire un fichier de paramètres (*.ini) et aller chercher toute seule les tables de la base dorsale et les rattacher toute seule comme une grande.

    Le process idéal et le plus rapide est la méthode TransferDatabase dans une boucle For/Next qui examine soit le nom des tables à lier soit la propriété Attribute (pour éviter de lier les table System) si toutefois les tables sont déjà liées (mais avec un chemin invalide).
    Il faut considérer que ton appli frontale doit avoir les tables liées déjà definies même si la liaisson est incorrecte une fois déployée sur le poste de ton client.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Tout d'abord désolé d'avoir mis 1 semaine à répondre, j'ai rencontré d'autres problèmes entre temps.
    Merci de ta réponse Argy, j'ai compris le principe de rattachement, mais sincèrement je ne sais absolument pas comment faire pour utiliser le TransferDatabase ainsi que l'Attribute des tables liées et comparer si leur chemin est invalide.
    J'imagine qu'avec la boucle for je rattache toutes mes tables une par une, mais comment faire pour regarder si le chemin est invalide ? Et le chemin "C:\..." soit etre ecrit en dur dans le code ?

    J'avoue etre un peu perdue, et je rame depuis un moment (je suis presque a la fin de mon stage, j'ai peur ^^).

    J'espere que tu pourras encore me conseiller comme tu l'as deja bcp fait !
    Merci bcp

    Méli

  13. #13
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Mmm, voici un exemple que tu devras sans doute adapter :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Public Sub RattacherTablesBaseDorsale(ByVal FichierBaseDeDonnee As String, ByVal NomBaseDeDonnee As String)
    Const ERROR_TABLEFR                                    As String = "Table des erreurs"
    Const ERROR_TABLEUS                                    As String = "Paste Errors"
     
    Dim oDB                                                As DAO.Database
    Dim oTDF                                               As DAO.TableDef
    Dim N                                                  As Integer
     
    Dim strTableCible                                      As String
    Dim strTableSource                                     As String
    Dim strLienTemp                                        As String
    Dim strBaseDeDonneeLiee                                As String
    Dim T                                                  As Integer
     
        On Error GoTo L_ErrRattacherTablesBaseDorsale
        DoCmd.SetWarnings False
        DoCmd.Hourglass True
     
     
        On Error GoTo L_ErrRattacherTablesBaseDorsale
     
        'Set oDB = DBEngine.OpenDatabase(FichierBaseDeDonnee)
        Set oDB = CurrentDb
     
        strBaseDeDonneeLiee = FichierBaseDeDonnee
        'Pour chaque table de la base donnée frontales (celles qui sont liées)
        For Each oTDF In oDB.TableDefs
            'Avec l'objet de définition de table
            With oTDF
                'Si c'est une table attachée et que ce n'est pas une table système
                If .Attributes = dbAttachedTable And Not .Attributes = dbSystemObject Then
                    'On prend le chemin de la liaison en place
                    strLienTemp = oTDF.Connect
                    'Si dans ce lien c'est la base de données attendue (il peut y avoir plusieurs bases attachées) et que le chemin est incorrect
                    If InStr(1, strLienTemp, NomBaseDeDonnee, vbTextCompare) And InStr(1, strLienTemp, FichierBaseDeDonnee, vbTextCompare) = 0 Then
                        'On prend le nom de la première table
                        strTableSource = oTDF.Name
                        'On vérifie que ce n'est pas une table des erreurs
                        Select Case strTableSource
                            Case ERROR_TABLEFR, ERROR_TABLEUS
                            Case Else
                                'On remplace ou donne le nom souhaité de la table cible (pas forcément le même que la table source mais c'est rare)
                                strTableCible = strTableSource
                                'On efface la table liée d'abord dans la base frontale
                                DoCmd.DeleteObject acTable, strTableSource
                                'On rattache la table
                                DoCmd.TransferDatabase acLink, "Microsoft Access", strBaseDeDonneeLiee, acTable, strTableSource, strTableCible
                                T = T + 1
                        End Select
                    End If
                End If
            End With
            'On passe à la table suivante
        Next oTDF
        'On ferme l'instance le la base de données
        If Not oDB Is Nothing Then oDB.Close
        If T Then
            MsgBox T & " tables on été rattachées avec succès.", vbInformation, "Fin d'opération"
        Else
            MsgBox "Aucune table n'a été rattachée, toutes l'étaient déjà correctement.", vbInformation, "Fin"
        End If
        On Error GoTo 0
    L_ExRattacherTablesBaseDorsale:
        'On libère les objets
        Set oTDF = Nothing
        Set oDB = Nothing
        DoCmd.Hourglass False
        Exit Sub
     
    L_ErrRattacherTablesBaseDorsale:
        MsgBox Err.Description, vbExclamation, Err.Source
        Resume L_ExRattacherTablesBaseDorsale
    End Sub
    Tu appelles la procédure comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub testRattacherTablesBaseDorsale()
    Const NOM_DB                                           As String = "MaBaseAMoi.mdb"
    Dim strCheminBase                                      As String
     
        strCheminBase = Application.CurrentProject.Path & "\" & NOM_DB
        If Dir(strCheminBase, vbNormal) = NOM_DB Then
            Call RattacherTablesBaseDorsale(strCheminBase, NOM_DB)
        Else
            MsgBox "La base " & NOM_DB & " n'existe pas !!!", vbExclamation
        End If
     
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    D'accord j'ai a peu pres compris ton code ! Je vais le tester ce we et je te redirai ce que ca a donné très bientot.

    Merci encore pour ton aide, vraiment... :') !

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

Discussions similaires

  1. Définition des préfixes dans le web.config.
    Par zooffy dans le forum ASP.NET
    Réponses: 0
    Dernier message: 28/04/2009, 11h50
  2. Gestion des chemins dans les JSPs
    Par schneidb dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 26/09/2008, 19h12
  3. Liste des chemins dans un graphe
    Par jon48 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 03/02/2008, 22h31
  4. Définition des variable dans un fichier.m d'une interface graphique
    Par developpeur82 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 10/05/2007, 14h53
  5. Ajouter des chemins dans la variable PATH
    Par Righetto Dominique dans le forum Linux
    Réponses: 7
    Dernier message: 21/03/2004, 17h38

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