Установка текущего индекса ТТаЫе
То, какой индекс является текущим для данного НД (компонент TTable), в ряде случаев имеет важное значение.
Во-первых, текущий индекс определяет поля, по которым будет отсортирован данный НД. Это важно как с точки зрения доступа к данным, так и с точки зрения их визуализации: представление данных должно быть максимально информативным. Плюс к этому пользователь должен быстро находить нужную ему информацию и видеть группировки записей внутри НД.
Во-вторых, многие методы и свойства TTable работают напрямую с текущим индексом. Это, например, метод SetRange для фильтрации записей в TTable и связанные с ним; методы для поиска записи, удовлетворяющей условию - FindKey, FindNearest и другие.
Для указания индекса, по которому будет производиться сортировка в НД, связанном с данным компонентом TTable, имеются два взаимоисключающих способа.
1) Путем занесения имени индекса в свойство property IndexName: string; например:
Tablel.IndexName := 'INDEX_BY_FIO';
Пример.
Для описанного выше примера заполнения ListBox именами доступных индексов сделаем для Table текущим индекс, имя которого является текущим в ListBoxl:Tablel.IndexName := ListBoxl.Items[ListBox1.Itemlndex];
В силу того, что имя главного (первичного) индекса для Paradox-таблиц не выводится, данный фрагмент кода может сделать текущим только вторичный индекс.
2) Путем занесения списка индексных полей в свойство property IndexFieldNames: string;
В случае указания нескольких полей их имена разделяются точкой с запятой. Пример:
Table1.IndexFieldNames := 'FIO; Doljnost';
Индекс с указанными полями должен физически существовать. Попытка присвоить свойству IndexFieldNames список полей, не являющихся полями какого-либо индекса, вызовет исключительную ситуацию. Данное свойство особенно ценно для Paradox-таблиц, т.к. позволяет сделать текущим главный (первичный) индекс путем перечисления входящих в него полей.