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.
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.
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
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
Voilà ce que j'ai fini par faire :
Et pour exécuter :
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
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
He bé, je n'avais pas vu qu'il existait une propiété foreign.
Merci hamidap.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager