На этом шаге мы рассмотрим способы установки текущего индекса.
Для указания индекса, по которому будет производиться сортировка в НД, связанном с данным компонентом TTable, имеются два способа:
Индекс с указанными полями должен физически существовать. Попытка присвоить свойству IndexFieldNames список полей, не являющихся полями какого-либо индекса, вызовет исключительную ситуацию.
Поместите на форму PupilsForm еще один компонент TComboBox. В свойстве Items этого компонента пропишите следующие строки: Класс, Год, ФИО (рисунок 1).
Рис.1. Выбор индекса
Как вы, наверное, уже догадались, с помощью этого выпадающего списка, мы будем устанавливать индекс для TablePupils, тем самым, сортируя этот НД. Свойству ItemIndex присвойте значение 0 и напишите следующий обработчик события OnChange компонента ComboBox2:
procedure TPupilsForm.ComboBox2Change(Sender: TObject); begin Case ComboBox2.ItemIndex of 0: DataModule2.TablePupils. IndexFieldNames:='Class'; 1: DataModule2.TablePupils.IndexName:='God_FIO'; 2: DataModule2.TablePupils.IndexName:='Famyle'; end; end;
Запустите приложение. Если все сделали верно, то при выборе значения "Год", текущим индексом станет индекс God_FIO (индекс по полям God; FIO). Если же мы выберем значение "Класс", то текущим индексом станет индекс по полю Class. У вас может возникнуть вопрос: как же мы можем индексировать НД по полю Class, если мы не создавали этот индекс? Если вы помните, то когда мы устанавливали ссылочную целостность между двумя НД, мы упомянули, что этот индекс построен автоматически по неявному определению внешнего ключа при создании ссылочной целостности.
Созданное приложение можно взять здесь.
Со следующего шага мы начнем кратко характеризовать визуальные компоненты, используемые для работы с НД.