Partager via


Recordset.Index, propriété (DAO)

S’applique à : Access 2013, Office 2013

Définit ou renvoie une valeur qui indique le nom de l’objet Index actuel dans un type de tableauRecordset (espaces de travail Microsoft Access uniquement).

Syntaxe

expression .Index

expression Variable représentant un objet Recordset.

Remarques

Les enregistrements des tables de base ne sont pas stockés dans un ordre précis. La définition de la propriété Index modifie l'ordre des enregistrements renvoyés par la base de données, elle n'a aucune incidence sur l'ordre en fonction duquel ils sont enregistrés.

L'objet Index spécifié doit déjà être défini. Si vous attribuez à la propriété Index un objet Index qui n'existe pas ou si la propriété Index n'est pas définie lorsque vous appelez la méthode Seek, une erreur piégeable se produit.

Examiner la index collection d’un TableDef objet pour déterminer les éléments Index objets sont disponibles pour le type de table jeu d’enregistrements les objets créés à partir de qui TableDef objet.

Vous pouvez créer un nouvel index de la table en créant une nouvelle Index objet définissant ses propriétés, en ajoutant le index ensemble de sous-jacents TableDef objet et rouvrir le jeu d’enregistrements objet.

Enregistrements renvoyés à partir d’un type de table jeu d’enregistrements objet peut être ordonné de façon uniquement par les index définis pour sous-jacents TableDef objet. Pour trier les enregistrements d’une autre façon, vous pouvez ouvrir un objet Recordset de type feuille de réponse dynamique, instantané ou avant uniquement à l’aide d’une instruction SQL avec une clause ORDER BY.

Remarque

  • Il n'est pas nécessaire de créer des index pour les tables. Dans le cas de tables volumineuses et non indexées, l'accès à un enregistrement spécifique ou la création d'un objet Recordset peut demander du temps. D'autre part, la création d'un nombre excessif d'index ralentit les opérations de mise à jour, d'ajout et de suppression car tous les index sont automatiquement mis à jour.
  • Les enregistrements non indexés et lus à partir de tables sont renvoyés sans ordre particulier.
  • Le attributs propriété de chaque champ objet dans le Index objet détermine la ordre des enregistrements et par conséquent détermine les techniques d’accès à utiliser pour cet index.
  • Un index unique vous permet d’optimiser la recherche des enregistrements.
  • Les index n’ont aucune incidence sur l’ordre physique d’une table de base. Ils affectent uniquement la procédure d’accès aux enregistrements utilisée par l’objet Recordset de type table lors de la sélection d’un index particulier ou de l’ouverture d’un objet Recordset.

Exemple

Cet exemple utilise la propriété Index pour définir des ordres d’enregistrements différents pour un objet Recordset de type table.

    Sub IndexPropertyX() 
     
       Dim dbsNorthwind As Database 
       Dim tdfEmployees As TableDef 
       Dim rstEmployees As Recordset 
       Dim idxLoop As Index 
     
       Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
       Set rstEmployees = _ 
          dbsNorthwind.OpenRecordset("Employees") 
       Set tdfEmployees = dbsNorthwind.TableDefs!Employees 
     
       With rstEmployees 
     
          ' Enumerate Indexes collection of Employees table. 
          For Each idxLoop In tdfEmployees.Indexes 
             .Index = idxLoop.Name 
             Debug.Print "Index = " & .Index 
             Debug.Print "  EmployeeID - PostalCode - Name" 
             .MoveFirst 
     
             ' Enumerate Recordset to show the order of records. 
             Do While Not .EOF 
                Debug.Print "    " & !EmployeeID & " - " & _ 
                   !PostalCode & " - " & !FirstName & " " & _ 
                   !LastName 
                .MoveNext 
             Loop 
     
          Next idxLoop 
     
          .Close 
       End With 
     
       dbsNorthwind.Close 
     
    End Sub 

Cet exemple illustre la méthode Seek en autorisant l’utilisateur à rechercher un produit avec un numéro d’identification.

    Sub SeekX() 
     
       Dim dbsNorthwind As Database 
       Dim rstProducts As Recordset 
       Dim intFirst As Integer 
       Dim intLast As Integer 
       Dim strMessage As String 
       Dim strSeek As String 
       Dim varBookmark As Variant 
     
       Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
       ' You must open a table-type Recordset to use an index, 
       ' and hence the Seek method. 
       Set rstProducts = _ 
          dbsNorthwind.OpenRecordset("Products", dbOpenTable) 
     
       With rstProducts 
          ' Set the index. 
          .Index = "PrimaryKey" 
     
          ' Get the lowest and highest product IDs. 
          .MoveLast 
          intLast = !ProductID 
          .MoveFirst 
          intFirst = !ProductID 
     
          Do While True 
             ' Display current record information and ask user  
             ' for ID number. 
             strMessage = "Product ID: " & !ProductID & vbCr & _ 
                "Name: " & !ProductName & vbCr & vbCr & _ 
                "Enter a product ID between " & intFirst & _ 
                " and " & intLast & "." 
             strSeek = InputBox(strMessage) 
     
             If strSeek = "" Then Exit Do 
     
             ' Store current bookmark in case the Seek fails. 
             varBookmark = .Bookmark 
     
             .Seek "=", Val(strSeek) 
     
             ' Return to the current record if the Seek fails. 
             If .NoMatch Then 
                MsgBox "ID not found!" 
                .Bookmark = varBookmark 
             End If 
          Loop 
     
          .Close 
       End With 
     
       dbsNorthwind.Close 
     
    End Sub 

L’exemple suivant montre comment utiliser la méthode Seek pour rechercher un enregistrement dans une table liée.

Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.

    Sub TestSeek()
        ' Get the path to the external database that contains
        ' the tblCustomers table we're going to search.
        Dim strMyExternalDatabase
        Dim dbs    As DAO.Database
        Dim dbsExt As DAO.Database
        Dim rst    As DAO.Recordset
        Dim tdf    As DAO.TableDef
        
        Set dbs = CurrentDb()
        Set tdf = dbs.TableDefs("tblCustomers")
        strMyExternalDatabase = Mid(tdf.Connect, 11)
        
        'Open the database that contains the table that is linked
        Set dbsExt = OpenDatabase(strMyExternalDatabase)
        
        'Open a table-type recordset against the external table
        Set rst = dbsExt.OpenRecordset("tblCustomers", dbOpenTable)
        
        'Specify which index to search on
        rst.Index = "PrimaryKey"
        
        'Specify the criteria
        rst.Seek "=", 123
        
        'Check the result
        If rst.NoMatch Then
            MsgBox "Record not found."
        Else
            MsgBox "Customer name: " & rst!CustName
        End If
        
        rst.Close
        dbs.Close
        dbsExt.Close
        Set rst = Nothing
        Set tdf = Nothing
        Set dbs = Nothing
        
        
    End Sub