Indexes コレクション (DAO)
適用先: Access 2013、Office 2013
Indexes コレクションには、格納されているすべての TableDef オブジェクトの Index オブジェクトが含まれます (Microsoft Access ワークスペースのみ)。
注釈
テーブル タイプの Recordset オブジェクトにアクセスする場合は、オブジェクトの Index プロパティを使用してレコードの順序を指定します。 このプロパティを、Recordset オブジェクトの基になる TableDef オブジェクトの Indexes コレクション内の既存の Index オブジェクトの Name プロパティ設定に設定します。
注:
Append または Delete メソッドを Indexes コレクションに使用できるのは、元になる TableDef オブジェクトの Updatable プロパティの設定が True の場合のみです。
新しい Index オブジェクトを作成した後は、 Append メソッドを使用して TableDef オブジェクトの Indexes コレクションに追加する必要があります。
重要
[!重要] データが新しいインデックスの属性に準拠していることを確認してください。 インデックスに一意の値が必要な場合は、既存のデータ レコードに重複がないことを確認します。 重複がある場合、Microsoft Access データベース エンジンはインデックスを作成できないため、新しいインデックスで Append メソッドを使用しようとすると、トラップ可能なエラーが発生します。
例
この例では、新しい Index オブジェクトを作成し、Employees TableDef の Indexes コレクションに追加し、次に TableDef の Indexes コレクションを列挙します。 その後に、まずプライマリ Index を使用し、次に新しい Index を使用して、 Recordset を列挙します。 このプロシージャを実行するには、IndexOutput プロシージャが必要です。
Sub IndexObjectX()
Dim dbsNorthwind As Database
Dim tdfEmployees As TableDef
Dim idxNew As Index
Dim idxLoop As Index
Dim rstEmployees As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set tdfEmployees = dbsNorthwind!Employees
With tdfEmployees
' Create new index, create and append Field
' objects to its Fields collection.
Set idxNew = .CreateIndex("NewIndex")
With idxNew
.Fields.Append .CreateField("Country")
.Fields.Append .CreateField("LastName")
.Fields.Append .CreateField("FirstName")
End With
' Add new Index object to the Indexes collection
' of the Employees table collection.
.Indexes.Append idxNew
.Indexes.Refresh
Debug.Print .Indexes.Count & " Indexes in " & _
.Name & " TableDef"
' Enumerate Indexes collection of Employees
' table.
For Each idxLoop In .Indexes
Debug.Print " " & idxLoop.Name
Next idxLoop
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees")
' Print report using old and new indexes.
IndexOutput rstEmployees, "PrimaryKey"
IndexOutput rstEmployees, idxNew.Name
rstEmployees.Close
' Delete new Index because this is a
' demonstration.
.Indexes.Delete idxNew.Name
End With
dbsNorthwind.Close
End Sub
Sub IndexOutput(rstTemp As Recordset, _
strIndex As String)
' Report function for FieldX.
With rstTemp
' Set the index.
.Index = strIndex
.MoveFirst
Debug.Print "Recordset = " & .Name & _
", Index = " & .Index
Debug.Print " EmployeeID - Country - Name"
' Enumerate the recordset using the specified
' index.
Do While Not .EOF
Debug.Print " " & !EmployeeID & " - " & _
!Country & " - " & !LastName & ", " & !FirstName
.MoveNext
Loop
End With
End Sub
この例では、 CreateIndex メソッドを使用して 2 つの Index オブジェクトを新規作成し、Employees TableDef オブジェクトの Indexes コレクションに追加します。 次に、 TableDef オブジェクトの Indexes コレクション、新しい Index オブジェクトの Fields コレクション、および新しい Index オブジェクトの Properties コレクションを列挙します。 このプロシージャを実行するには、CreateIndexOutput 関数が必要です。
Sub CreateIndexX()
Dim dbsNorthwind As Database
Dim tdfEmployees As TableDef
Dim idxCountry As Index
Dim idxFirstName As Index
Dim idxLoop As Index
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set tdfEmployees = dbsNorthwind!Employees
With tdfEmployees
' Create first Index object, create and append Field
' objects to the Index object, and then append the
' Index object to the Indexes collection of the
' TableDef.
Set idxCountry = .CreateIndex("CountryIndex")
With idxCountry
.Fields.Append .CreateField("Country")
.Fields.Append .CreateField("LastName")
.Fields.Append .CreateField("FirstName")
End With
.Indexes.Append idxCountry
' Create second Index object, create and append Field
' objects to the Index object, and then append the
' Index object to the Indexes collection of the
' TableDef.
Set idxFirstName = .CreateIndex
With idxFirstName
.Name = "FirstNameIndex"
.Fields.Append .CreateField("FirstName")
.Fields.Append .CreateField("LastName")
End With
.Indexes.Append idxFirstName
' Refresh collection so that you can access new Index
' objects.
.Indexes.Refresh
Debug.Print .Indexes.Count & " Indexes in " & _
.Name & " TableDef"
' Enumerate Indexes collection.
For Each idxLoop In .Indexes
Debug.Print " " & idxLoop.Name
Next idxLoop
' Print report.
CreateIndexOutput idxCountry
CreateIndexOutput idxFirstName
' Delete new Index objects because this is a
' demonstration.
.Indexes.Delete idxCountry.Name
.Indexes.Delete idxFirstName.Name
End With
dbsNorthwind.Close
End Sub
Function CreateIndexOutput(idxTemp As Index)
Dim fldLoop As Field
Dim prpLoop As Property
With idxTemp
' Enumerate Fields collection of Index object.
Debug.Print "Fields in " & .Name
For Each fldLoop In .Fields
Debug.Print " " & fldLoop.Name
Next fldLoop
' Enumerate Properties collection of Index object.
Debug.Print "Properties of " & .Name
For Each prpLoop In .Properties
Debug.Print " " & prpLoop.Name & " - " & _
IIf(prpLoop = "", "[empty]", prpLoop)
Next prpLoop
End With
End Function