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

Access Discussion :

Informations sur propriétés de tables attachées / liées [À faire]


Sujet :

Access

  1. #1
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut Informations sur propriétés de tables attachées / liées


    J'ai une appli qui vérifie les tables attachées d'une base.
    Pour cela, je récupère le nom de la base et de la table attachée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CurTDef as TableDef
    For Each CurTDef In CurrentDb.TableDefs
       With CurTDef
          'Mémorisation des données de l'attache
          NomBase = ExtraireNomBase(.Connect) 'Extrait le nom de la base
          NomTable = .Name
          NomTableAtt = .SourceTableName
       End With
    Next CurTDef
    J'ai besoin de récupérer, à la fois, le nom de la table affiché (.Name) et celui de la table réélle (.SourTableName) car les noms affichés peuvent avoir été modifiés.

    Or les noms de SourceTableName sont tronqués à 32 caractères

    Y a t-il un moyen de récupérer le nom complet de la table attaché. :
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  2. #2
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    PS: Vous pouvez le voir simplement sous Access 2000 en affichant le TipText d'une table attachée de plus de 32 caractères. Au lieu d'afficher uniquement le chemin de la base distante, il affiche "[nom tronqué] vers [base distante]"
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  3. #3
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Est-ce que quelqu'un peut me confirmer que cela ne vient pas de ma config ?
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  4. #4
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Salut,

    J'ai l'impression de faire un monologue mais si personne n'a ce genre de pb, alors, comment faites-vous pour rafraichir une table attachée en modifiant l'emplacement de la base d'origine ???
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  5. #5
    ARO
    ARO est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 74
    Points : 128
    Points
    128
    Par défaut
    Avec la première fonction, on verifie que la table est toujour attachée.

    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 VérifierAttaches() As Boolean
    ' Vérifie les attaches à la base de données et
    ' retourne Vrai si tout va bien.
     
        Dim dbs As Database, rst As Recordset
        Set dbs = CurrentDb()
     
        ' Ouvre une table attachée pour vérifier si l'information
        ' de connexion est correcte.
        On Error Resume Next
        Set rst = dbs.OpenRecordset("tblClient")
     
        ' S'il n'y a pas d'erreur, retourne Vrai.
        If Err = 0 Then
            VérifierAttaches = True
        Else
            VérifierAttaches = False
        End If
     
        Set rst = Nothing
        Set dbs = Nothing
    Fonction pour attaché à un nouveau fichier mdb

    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
     
    Private Function ActualiserAttaches(chNomFichier As String) As Boolean
    ' Actualise les attaches à la base de données spécifiée.
    ' Retourne Vrai si tout s'est bien passé.
     
        Dim dbs As Database
        Dim entCompteur As Integer
        Dim tdf As TableDef
     
        ' Boucle sur toutes les tables de la base de données.
        Set dbs = CurrentDb()
        For entCompteur = 0 To dbs.TableDefs.Count - 1
            Set tdf = dbs.TableDefs(entCompteur)
     
            ' Si la table possède une chaîne de connexion,
            ' c'est une table attachée.
            If Len(tdf.Connect) > 0 Then
                tdf.Connect = ";DATABASE=" & chNomFichier
                Err = 0
                On Error Resume Next
                tdf.RefreshLink         ' Rattache la table.
                If Err <> 0 Then
                    ActualiserAttaches = False
                    Exit Function
                End If
            End If
        Next entCompteur
     
        Set tdf = Nothing
        Set dbs = Nothing
     
        ActualiserAttaches = True        ' Actualisation complète.
     
    End Function

  6. #6
    ARO
    ARO est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 74
    Points : 128
    Points
    128
    Par défaut
    Mon de la db ou la table se trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Function NomAttachement() As String
     
    Dim db As DAO.Database
     
    Set db = CurrentDb
     
    NomAttachement = Mid(db.TableDefs("tblClient").Connect, 11)
     
    db.Close
    Set db = Nothing
     
    End Function

  7. #7
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    En fait, je me suis un peu mélangé les pinceaux. Le rafraichissement ne pose pas de pb puisqu'on utilise uniquement le nom "affiché" pour accéder au tabledef puis la propriété Connect que l'on réécrit. Donc, dans ce cas, on se fout de SourceTableName.

    Cependant, c'est plus complexe dans un cas de création. Imaginons que je renomme certaines attaches de table (ex "toto" en "old_toto" et "tata" en "tata2").
    Mon prog doit, pout toutes les tables qui ont été modifiées (le nom de l'attache est différent du nom de la table attachée), créer une nouvelle attache vers la même table mais dans une autre base.
    Ainsi je me retrouverais avec
    - "old_toto" qui pointe vers la table "toto" de la base "bd1.mdb"
    - "tata2" qui pointe vers la table "tata" de la base "bd1.mdb"
    et
    - "toto" qui pointe vers la table "toto" de la base "bd2.mdb"
    - "tata" qui pointe vers la table "tata" de la base "bd2.mdb"
    On peut se servir de ça avant une migration par exemple.

    Ne sachant pas la liste des tables à traiter (parce qu'elle est trop longue par ex), je balaye les tabledefs.
    Pour les attaches dont le nom d'attache est différent du nom de la table réelle (=> "toto" dans SourceTableName), je crée une attache ayant pour connection "c:\....\bd2.mdb", la propriété SourceTableName comme nom de la table à attacher et SourceTableName comme nom d'attache.

    je dois donc me retrouver avec des attaches "old_xxx" ou "xxx2" ou "autrenomxxx" qui pointent vers des tables x, y, z dans bd1.mdb et des attaches "x", "y" ou "z" qui pointent respectivement vers des tables x, y ou z dans bd2.mdb

    Jusque là, ça marche

    Mais si j'ai le malheur d'avoir une table dont le nom dépasse les 32 caractères (ex "abcdefghijklmnopqrstuvwxyzabcdefghijklmnop" soit 42 caractères) j'aurais un bug car je vais me retrouver à essayer d'attacher la table "abcdefghijklmnopqrstuvwxyzabcdef" de la base bd2.mdb et, bien évidement, elle n'existe pas puisque son nom réel a été tronqué !!!!
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Février 2003
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 28
    Points : 139
    Points
    139
    Par défaut
    Dans la table MSysObjects tu trouveras tout ce dont tu as besoin

  9. #9
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    C'est quoi cette table ?
    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  10. #10
    Futur Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    tu vas dans Outils-->Option onglet affichage et tu coche la case objet système.
    Tu auras des tables qui vont apparaitre dont celle-ci.


    Nadine
    Nadine
    Sometimes you're the pigeon, Sometimes you're the statue

  11. #11
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Impeccable

    Il ne me reste plus qu'à rechercher les infos de mon attache dans cette table.
    Pour info générale, en regardant 5 mn, voici quelques champs utiles de cette table :
    - Database : Chemin et nom de la base distante
    - DateCreate et DateUpdate
    - ForeignName : Nom complet de la table attachée
    - Name : Nom affichée de la table
    - Type : type de l'objet (1=table locale, 5=requete, 6=table attachée, -32768=formulaire...)

    il ne faut pas de tout pour faire un monde. Il faut du bonheur et rien d'autre. Paul Eluard
    Des fois ça malche, des fois ça malche pas. Garcimore

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comment appeler la fonction ?
    Excusez la question bête mais je souhaiterais savoir où je dois insérer les codes que vous donnez et ensuite comment les lancer (par exemple avec un bouton) ?

  13. #13
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Que veux-tu faire au juste ?
    (\ _ /)
    (='.'=)
    (")-(")

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

Discussions similaires

  1. Compter plusieurs informations sur la même table
    Par Julien Bodin dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/04/2010, 14h13
  2. Ajout d'un champ dans un table attachée (liée)
    Par arfason dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 03/08/2009, 12h01
  3. Propriétés de tables attachées Excel vers Access
    Par valpaq dans le forum Access
    Réponses: 4
    Dernier message: 04/12/2007, 16h17
  4. [Conception] Rerchercher des informations sur une autre table
    Par tilou dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/05/2006, 19h35
  5. Tables attachées (Liées a une autre BD)
    Par charleshbo dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 14h03

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