Vous pouvez examiner les objets TableDef
pour accéder aux noms d'index.
Public Sub ShowIndexNames()
Dim tdf As TableDef
Dim idx As Index
Dim num_indexes As Long
On Error GoTo ErrorHandler
For Each tdf In CurrentDb.TableDefs
num_indexes = tdf.Indexes.Count
If Left$(tdf.Name, 4) <> "MSys" Then
If num_indexes > 0 Then
For Each idx In tdf.Indexes
Debug.Print tdf.Name, idx.Name
Next idx
End If
End If
Next tdf
ExitHere:
Exit Sub
ErrorHandler:
Select Case Err.Number
Case 3110
'Could not read definitions; no read definitions '
'permission for table or query '<Name>'. '
Debug.Print "No read definitions permission for " _
& tdf.Name
num_indexes = 0
Resume Next
Case Else
Debug.Print Err.Number & "-> " & Err.Description
GoTo ExitHere
End Select
End Sub
Modifier: Révision de la sous ignorer les tables MSys * (système d'accès).
Vous pouvez également utiliser la méthode OpenSchema
d'ADO pour récupérer des informations sur les index. Le code ci-dessous répertorie le nom d'index, la table associée et si l'index est la clé primaire. Je l'ai écrit pour utiliser la liaison tardive pour ADO car cela ne nécessite pas de définir la référence pour Microsoft ActiveX Data Objects [version] Bibliothèque.
Const adSchemaIndexes As Long = 12
Dim cn As Object ' ADODB.Connection
Dim rs As Object ' ADODB.Recordset
Dim i As Long
Set cn = CurrentProject.Connection
Set rs = cn.OpenSchema(adSchemaIndexes)
With rs
' enable next three lines to view all the recordset column names
' For i = 0 To (.Fields.Count - 1)
' Debug.Print .Fields(i).Name
' Next i
Do While Not .EOF
Debug.Print !TABLE_NAME, !INDEX_NAME, !PRIMARY_KEY
.MoveNext
Loop
.Close
End With
Set rs = Nothing
Set cn = Nothing
Si vous préférez examiner les index pour une seule table plutôt que pour chaque table dans la db, passer le nom de table comme le cinquième élément d'un tableau.
Set rs = cn.OpenSchema(adSchemaIndexes, Array(Empty, Empty, Empty, Empty, "tblFoo"))
HansUp> Merci – waanders