インデックスを使用したデータのグループ化

提供: RAD Studio
移動先: 案内検索

ソートとインデックス付け への移動


クライアント データセットでインデックスを使用する場合は、レコードのソート順序が自動的に決まります。この順序のために、隣接するレコードでは、通常、インデックスを構成するフィールドの値が重複します。たとえば、SalesRep フィールドと Customer フィールドでインデックス付けされている、次のような受注テーブルの一部を考えてみましょう。

SalesRep Customer OrderNo Amount

1

1

5

100

1

1

2

50

1

2

3

200

1

2

6

75

2

1

1

10

2

3

4

200


このソート順序のために、SalesRep 列の隣接する値が重複しています。SalesRep が 1 のレコードでは、Customer 列の隣接する値が重複しています。つまり、データは SalesRep でグループ化され、SalesRep グループ内では Customer でグループ化されます。グループ化にはそれぞれレベルが関連付けられています。この例では、SalesRep グループはレベル 1(他のどのようなグループにもネストしていないため)で、Customer グループはレベル 2(レベル 1 のグループにネストしているため)です。グループ化レベルは、インデックスにおけるフィールドの順序に対応しています。

クライアント データセットでは、現在のレコードが、指定されたグループ化レベル内のどこにあるかを特定できます。これにより、アプリケーションでは、レコードがグループの先頭にあるか中央にあるか、それとも最後にあるかによって、レコードの表示を変えることができます。たとえば、グループの先頭レコードにだけフィールド値を表示し、重複する値を表示しないようにすることもできます。上記のテーブルでこれを行うと、次のような結果になります。

SalesRep Customer OrderNo Amount

1

1

5

100

2

50

2

3

200

6

75

2

1

1

10

3

4

200


現在のレコードが指定のグループ内のどこに位置するかを判定するには、GetGroupState メソッドを使用します。GetGroupState では、グループのレベルを指定する整数を受け取り、現在のレコードがそのグループ内のどこにあるか(先頭レコード、最終レコード、またはそのどれでもない)を示す値を返します。

インデックスを作成する際には、(インデックスに含まれるフィールドの数を上限として)そのインデックスでサポートされるグループ化レベルを指定できます。GetGroupState では、そのレベルを超えるグループの情報は提供できません。たとえ、インデックスによるレコードのソートが追加のフィールドに基づいていても状況は変わりません。

関連項目