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 :

Lier toutes le tables d'une base en VBA


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de DeFCrew
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 167
    Points : 94
    Points
    94
    Par défaut Lier toutes le tables d'une base en VBA
    Bonjour à tous les Developpezeur !

    J'ai un fichier mdb client qui permet de visualiser une base de données en réseaux. Il y a donc des tables liées sinon le réseaux ne fonctionnerait pas.
    Les tables liées proviennent de deux base mdb sur le réseaux.
    Je voudrais effacer toutes les tables liées d'UNE SEULE base mdb et la remettre à jour, car elle est alimentée de temps en temps par une tierce personne.

    J'ai trouvé du code pour lier des tables automatiquement mais à chaque fois ce code supprime TOUTES les tables liées de ma base client pour ensuite refaire les liens a partir d''UNE SEULE base mdb. Hors, j'ai des tables liées qui n'ont pas à être supprimées. Je voudrais juste en remplacer certaines.

    En fait je voudrais lier des nomenclatures de produits (j'en ai plus d'un cinquantaine) créé dans un fichier réseaux nommé Nomenclature platines.mdb vers ma base de donnée client, de tel sorte que si j'installe ma base client sur un autre poste en réseaux, les tables liées reste à jour en permanence sans avoir besoin de le faire manuellement. Et si il y en a des nouvelles, qu'elles se mettent automatiquement.

    Alors j'ai une petite idée du pourquoi du comment :

    Je PENSE qu'il faut faire un tableaux qui récapitule toutes les tables présentes dans Nomenclature platines.mdb, vérifier pour chaque ligne si la table existe déjà dans le base client, dans ce cas on supprime le lien et on le refait (au cas ou il y est des modifications apporter par la tierce personne), et si la table n'existe pas : on la créée.
    Mais voilà plus facile à dire qu'à faire, si jamais quelqu'un aurait un début de piste à me proposer, je suis preneur.

    D'avance merci pour vos réponse

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,

    du code trouvé sur développez :
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    Public Function attachT(ByVal strtable As String, strConnect As String, strSourceTable As String) As Boolean
    ' Attache une table à la base de données courante, paramètres :
    ' strtable : nom local de la table à créer
    ' strconnect : localisation de la base où trouver la table à attacher
    ' strsourcetable : nom de la table dans la base source
     
    On Error GoTo Err_attachT
     
    Dim dbsTemp As Database
    Dim tdfLinked As TableDef
    Dim rstLinked As Recordset
    Dim intTemp As Integer
    Dim endroit As String
    endroit = ";DATABASE=" & strConnect
     
    Set dbsTemp = CurrentDb
     
    ' Crée un objet TableDef, définit ses propriétés
    ' Connect et SourceTableName en fonction des
    ' arguments passés et ajoute l'objet à la collection TableDefs.
    Set tdfLinked = dbsTemp.CreateTableDef(strtable)
     
    tdfLinked.Connect = endroit
    tdfLinked.SourceTableName = strSourceTable
    dbsTemp.TableDefs.Append tdfLinked
     
    ' table attachée ?
    If table_existe(strtable) <> "no found" Then
        attachT = True
    Else
        attachT = False
    End If
    Exit Function
     
    Err_attachT:
        attachT = False
        Exit Function
    End Function
     
     
    Public Function detachT(ByVal strtable As String) As Boolean
    ' Supprime l'attache d'une table dont le nom est passé en paramètre
     
    ' si la table n'existe pas, inutile d'aller plus loin
    If table_existe(strtable) = "no found" Then
        detachT = True
        Exit Function
    End If
     
    On Error GoTo Err_detachT
     
    Dim dbsTemp As Database
    Set dbsTemp = CurrentDb
    dbsTemp.TableDefs.Delete strtable
    Set dbsTemp = Nothing
     
    ' table détachée ?
    If table_existe(strtable) = "no found" Then
        detachT = True
    Else
        detachT = False
    End If
    Exit Function
     
    Err_detachT:
        Set dbsTemp = Nothing
        detachT = False
        Exit Function
    End Function
     
    Public Function table_existe(ByVal strtable As String)
    ' Est-ce que la table donnée existe dans la base courante ?
    On Error GoTo err_table_existe
    Dim dbs As Database, tdfLoop As TableDef, strrep As String
    Set dbs = CurrentDb
    strrep = "no found"
    For Each tdfLoop In dbs.TableDefs
        If UCase(tdfLoop.Name) = UCase(strtable) Then
            strrep = strtable
            Exit For
        End If
    Next tdfLoop
    Set tdfLoop = Nothing
    Set dbs = Nothing
    table_existe = strrep
    Exit Function
     
    err_table_existe:
    Set tdfLoop = Nothing
    Set dbs = Nothing
    table_existe = "error"
    End Function
    Ceci devrait te permettre de tester si la table existe, de détacher la table et de la réattacher.
    En gros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Ouverture du recordset rst des tables à éxaminer...
    Set rst = currentdb.openrecordset("ta_table_parametre")
    if table_existe(rst!nom_de_table) then
       detachT rst!nom_de_table 
       currentdb.tabledefs.refresh
       attachT rst!nom_de_table, rst!chemin_et_nom_base, rst!nom_de_table_origine
    end if
    rst.movenext

  3. #3
    Membre régulier Avatar de DeFCrew
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 167
    Points : 94
    Points
    94
    Par défaut
    merci pour ton aide, j'essaye depuis tout à l'heure de faire quelque chose mais j'ai deux trois petits soucis avec l'adaptation du code surtout en ce qui concerne le listing des tables pour la variable nom_de_table à placer d'en une boucle for. Bref je réessaye demain et ça devrait le faire je pense

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/06/2006, 20h06
  2. [MySQL] lister toutes les tables d'une base
    Par Tr@nkill dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2006, 14h45
  3. Liste de toutes les tables d'une base inconnue
    Par TTiger dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/11/2005, 07h59
  4. Sélection de toute les tables d'une base
    Par lord_paco dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 14h56

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