Recordset.Index-Eigenschaft (DAO)

Gilt für: Access 2013, Office 2013

Legt einen Wert fest, der den Namen des aktuellen Index-Objekts in einem Recordset-Objekt vom Typ "Tabelle" angibt, oder gibt einen solchen Wert zurück (nur Microsoft Access-Arbeitsbereiche).

Syntax

Ausdruck .Index

Ausdruck Eine Variable, die ein Recordset-Objekt darstellt.

Bemerkungen

Datensätze in Basistabellen werden nicht in einer bestimmten Reihenfolge gespeichert. Durch Festlegen der Index-Eigenschaft wird die Reihenfolge der von der Datenbank zurückgegebenen Datensätze geändert. Dies wirkt sich nicht auf die Reihenfolge aus, in der die Datensätze gespeichert werden.

Das angegebene Index-Objekt muss bereits definiert sein. Wenn Sie für die Index-Eigenschaft ein nicht vorhandenes Index-Objekt angeben oder die Index-Eigenschaft beim Verwenden der Seek -Methode nicht festgelegt ist, tritt ein auffangbarer Fehler auf.

Untersuchen Sie die Indexes-Sammlung eines TableDef-Objekts, um zu bestimmen, welche Index-Objekte für Recordset-Objekte vom Typ "Tabelle" zur Verfügung stehen, die aus diesem TableDef-Objekt erstellt werden.

Sie können einen neuen Index für die Tabelle erstellen, indem Sie ein neues Index-Objekt erstellen, die zugehörigen Eigenschaften festlegen, es an die Indexes-Sammlung des zugrunde liegenden TableDef-Objekts anfügen und anschließend das Recordset-Objekt erneut öffnen.

Datensätze, die von einem Recordset-Objekt vom Typ "Tabelle" zurückgegeben werden, können nur nach den Indizes angeordnet werden, die für das zugrunde liegende TableDef-Objekt definiert sind. Um Datensätze in einer anderen Reihenfolge zu sortieren, können Sie ein Recordset-Objekt vom Typ "Dynaset", "Snapshot" oder "Forward-only" öffnen, indem Sie eine SQL-Anweisung mit einer ORDER BY-Klausel verwenden.

Hinweis

  • Sie müssen keine Indizes für Tabellen erstellen. Bei großen Tabellen ohne Index kann der Zugriff auf einen bestimmten Datensatz oder das Erstellen eines Recordset-Objekts sehr lange dauern. Andererseits kann die Erstellung zu vieler Indizes Update-, Anfüge- und Löschvorgänge verlangsamen, da alle Indizes automatisch aktualisiert werden.
  • Datensätze, die aus Tabellen ohne Indizes eingelesen werden, werden in einer unbestimmten Reihenfolge zurückgegeben.
  • Die Attributes-Eigenschaft jedes Field-Objekts im Index-Objekt bestimmt die Reihenfolge der Datensätze und folglich die geeigneten Methoden zum Zugreifen auf diesen Index.
  • Ein eindeutiger Index trägt zur Optimierung der Suche nach Datensätzen bei.
  • Indizes wirken sich nicht auf die physische Reihenfolge einer Basistabelle aus, sondern beeinflussen nur, wie vom Recordset-Objekt des Typs "Tabelle" auf die Datensätze zugegriffen wird, wenn ein bestimmter Index ausgewählt oder ein Recordset geöffnet wird.

Beispiel

In diesem Beispiel wird die Index-Eigenschaft verwendet, um verschiedene Datensatzreihenfolgen für ein Recordset vom Typ "Tabelle" festzulegen.

    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 

Dieses Beispiel veranschaulicht die Seek-Methode, indem dem Benutzer erlaubt wird, nach einem Produkt anhand einer ID-Nummer zu suchen.

    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 

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe der Seek-Methode einen Datensatz in einer verknüpften Tabelle finden.

Der Beispielcode stammt von:Microsoft 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