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

Requêtes et SQL. Discussion :

Lister les clés primaires et étrangères de toutes les tables d'une base


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 21
    Points
    21
    Par défaut Lister les clés primaires et étrangères de toutes les tables d'une base
    Bonjour,

    Je suis sur un projet Access (sur lequel je suis tout nouveau) et j'aimerais lister les clés primaires et étrangères de toutes les tables de ma base avant de commencer.
    des pistes svp...?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 333
    Points
    34 333
    Par défaut
    salut,
    bienvenue sur DVP
    il existe tout plein de codes disponibles dans la
    en combinant ce que tu trouveras ici à une boucle for each tu trouveras ton bonheur:
    http://access.developpez.com/faq/?pa...ChpClePrimaire
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour hamidap,
    personnellement je ne sais pas faire ce que tu souhaites via une requête.
    Mais en VBA, il te faut lister les champs de l'index PrimaryKey de chacune de tes tables. Pour les clés étrangères, il faut aupréalable avoir définit les relations entre les tables pour obtenir les clés érangères.

    Exemple pour lister les clés primaires :
    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
     
    'Récupère les champs composant les clés primaires des tables Non-systèmes
    'et les affiche à l'écran dans une MsgBox.
    Sub GetAllPK ()
     Dim Tbl AS DAO.TableDef, Fld AS DAO.Field
     Dim  Message AS String, ListeFld As String
     
     For Each Tbl In CurrentDB.TableDefs
        If ((Tbl.Attributes And dbSystemObject) = 0) And ((Tbl.Attributes And dbHiddenObject) = 0) Then
            Message=Iif(IsNull(Message),Tbl.Name,Message & VbCrLf & Tbl.Name)
            ListeFld=""
            For Each Fld In Tbl.Indexes("PrimaryKey").Fields
              ListeFld=Iif(ListeFld="",Fld.Name,ListeFld & " - " & Fld.Name)
            Next
            Message=Message & " : " & ListeFld
        End if
     Next
     Msgbox Message
    End sub

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Voilà ce que j'ai fini par faire :

    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
     
    Public Function NomClePrimaire() As String
    On Error GoTo err
    Dim oInd As DAO.Index
    Dim oDb As DAO.Database
    Dim oTbl As DAO.TableDef
    Dim oFld As DAO.Field
    Dim UneTable
    Dim trouve
    Dim i As Integer
    Dim Nom$
    i = 0
    Set oDb = CurrentDb
    ' Ouvrir un fichier rapport
    Open "F:\TEST\Rapport.txt" For Output As 1
    For Each UneTable In oDb.TableDefs
    Nom$ = UneTable.Name
    If (UCase(Left$(Nom$, 4)) <> "MSYS") And (UCase(Left$(Nom$, 5)) <> "TABLE") Then ' Si ce n'est pas une table système
    'Charger la table i
    Set oTbl = oDb.TableDefs(i)
    'Parcours les index de la table i
    For Each oInd In oTbl.Indexes
    'S'il s'agit d'une clé primaire, alors traiter
    If oInd.Primary Then
    For Each oFld In oInd.Fields
    NomClePrimaire = NomClePrimaire & oFld.Name & ","
    Next oFld
    Exit For
    ElseIf oInd.Foreign Then
    For Each oFld In oInd.Fields
    NomClePrimaire = NomClePrimaire & "secondaire : " & oFld.Name & ","
    Next oFld
    Exit For
    End If
    Next oInd
    'incrémente le compteur des tables et passe à la table suivante
    trouve = trouve + 1
    i = i + 1
    NomClePrimaire = NomClePrimaire & vbCrLf
    End If
    Next UneTable
    'Enleve la dernière virgule
    'NomClePrimaire = Left(NomClePrimaire, Len(NomClePrimaire) - 1)
    NomClePrimaire = NomClePrimaire & vbCrLf & trouve
    ' Fermer le fichier rapport
    Close
    Exit Function
    err:
    End Function
    Et pour exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Command1_Click()
    Dim Responsel As Long
    Print #1, NomClePrimaire()
    'afficher le fichier text
    Response = Shell("NotePad.exe F:\TEST\Rapport.txt", vbNormalFocus)
    End Sub

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    He bé, je n'avais pas vu qu'il existait une propiété foreign.
    Merci hamidap.

Discussions similaires

  1. Sélectionner toutes les clés primaires
    Par Issam dans le forum SQL
    Réponses: 4
    Dernier message: 06/04/2015, 18h04
  2. Activer toutes les clés primaires de l'utilisateur connecté
    Par SheikYerbouti dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/12/2011, 15h07
  3. [AC-2003] Lier toutes le tables d'une base en VBA
    Par DeFCrew dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/04/2010, 16h58
  4. Réponses: 1
    Dernier message: 25/11/2008, 11h11
  5. Lister toutes les clés étrangères de toutes le tables
    Par Samish dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 10h15

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