Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VP_LAB_BD_DELPHI_RUS.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.93 Mб
Скачать

6.1.9. Методы для сортировки данных

Сортировка данных производится по значениям столбцов, для которых опре­делены основной или вторичные ключи, т. е. сформированы индексы.

При вызове команд подменю ‘Сортировать по:’ выполняется сортировка по­сле установки соответствующего значения имени поля индекса, например:

Table1.IndexFieldNames := ‘NZ’; - для сортировки по номеру зачетки;

Table1.IndexFieldNames := ‘FIO’; - для сортировки по фамилиям;

Table1.IndexFieldNames := ‘RS’; -для сортировки по размеру стипендии.

Для определения поля индекса сортировки можно использовать разные ме­тоды для каждого пункта меню. Фрагмент примера с текстами нескольких ме­тодов для сортировки дан в листинге 6.1. Но можно использовать и разделен­ный - один метод для всех пунктов меню, вызывающих сортировку. Такой пример дан в листинге 6.2. В нем определение поля индекса сортировки про­изводится методом N16Click. Выбор имени поля таблицы для формирования значения IndexFieldNames - имени поля индекса - производится из списка зна­чений свойства IndexDefs оператором:

Table1.IndexFieldNames:= Table1.IndexDefs[Tag]. Fields;

Номер элемента списка определяется значением свойства Tag, установленно­го в процессе разработки меню для каждой команды подменю ‘Сортировать по:’. Значения свойства Tag для сортировки по различным столбцам даны в табл. 6.3.

Таблица 6.3.Значения свойства Tag для сортировки по различным столбцам

Для сортировки по:

Имя пункта меню

Значение свойства Tag

номерам зачеток

N16

0

фамилиям

N17

2

размеру стипендии

N18

1

Последовательность индексов в списке IndexDefs можно видеть при вызове значений свойства IndexDefs компонента Table1. Щелчок на многоточии этого свойства вызывает EditingTable1.IndexDefs - редактора индексов таблицы. Его вид дан на рис. 6.6. Из него видны номера элементов списка IndexDefs.

Рис. 6.6. Вид редактора индексов таблицы

6.1.10. Методы для поиска данных

Поиск данных производится по одной из команд пункта меню Поиск:

- по фамилии (J = 5);

- быстрый по фамилии (J = 6);

- ближайшей подходящей (J = 7);

- по фамилии и стипендии (J = 8);

- постепенный поиск.

Процесс поиска первых четырех видов реализуется в 2 этапа. На первом этапе с помощью метода N19Click (одного для всех методов поиска, кроме постепенного) производится:

- показ панели Panel1 с меткой Label6 и окном редактора Edit1 для ввода тре­буемой фамилии;

- установка J-значения признака метода поиска.

Для поиска по фамилии и стипендии, кроме панели Panel1, устанавливается видимой также панель Рапеl2. В ее метку выводится текст ‘Введите размер стипендии:’ и активизируется окно MaskEdit1 для ввода требуемого размера стипендии.

На втором этапе методом Button1.Click производится поиск записи одним из заданных методов поиска.

Для определения метода поиска используется значение свойства Tag пункта меню, выбранного пользователем для поиска. Оно устанавливается в процессе разработки приложения и имеет значения, представленные в табл. 6.4.

Таблица 6.4. Значения свойства Tag для различных методов поиска

Для поиска

Имя пункта меню

Значение свойства Tag

по фамилии

N19

5

быстрого по фамилии

N20

6

ближайшей подходящей

N21

7

по фамилии и стипендии

N23

8

В методе N19Click устанавливается значение свойства J = Tag соответствую­щего пункта меню. Затем производится показ панели Panel1 с меткой Label6 (‘Введите ФИО и нажмите кнопку Искать’), окном Edit1 и кнопкой Искать (Poisk) для запуска процесса поиска.

После ввода требуемой фамилии и инициалов и нажатия кнопки Искатьначи­нается процесс поиска методом PoiskClick. Он выполняется по-разному, в зависи­мости от значения признака J. После поиска данных выдается сообщение об успешности (или неуспешности) поиска с помощью вложенных процедур S1 и S2. По завершении поиска устанавливается невидимой панель Panel1 оператором: Panel1.Visible := False;

Процесс поиска в методе PoiskClick определяется значением J.

Для J = 5 выполняется поиск по фамилии с помощью методов Table1.SetKey и Table1.GoToKey. Предварительно устанавливается значение поля индекса, по которому производится поиск, оператором:

Table1.IndexFieldNames := ‘FIO’;

Значение поискового признака устанавливается оператором:

Table1.FieldByName(‘FIO’).AsString := Edit1.Text;

Для быстрого поиска (J = 6) используется функция:

Table1.Locate(‘FIO’, Edit1.Text, [LoCaselnsensitive, LoPartialKey]),

где:

FIO - имя поля записи, по которому выполняется поиск;

Edit1.Text - требуемое значение поля (фамилии);

LoCaselnsensitive - регистр букв не учитывается;

LoPartialKey - допускается частичное совпадение значений.

При поиске ближайшего наиболее подходящего значения последовательность операторов аналогична последовательности операторов при поиске по фамилии, за исключением: последним оператором является:

Table1.GoToNearest; - найти ближайшее подходящее значение.

При поиске по фамилии и стипендии используется метод-функция аналогич-; но быстрому поиску; но в качестве фактического параметра с поисковыми при­знаками применен параметр в виде списка из двух значений для поиска:

Table1.Locate(‘FIO;RS’, VarArrayOf([Edit1.Text, MaskEdit1.Text]), // - пофамилиии

[LoCaselnsensitive, LoPartialKey]) // - по стипендии

Постепенный поиск производится в 2 этапа. Подготовка к поиску произво­дится с помощью метода N22Click - Поиск - постепенный. С его помощью становится видимой панель Panel3 с меткой (‘Вводите фамилию: по завершении - двойной щелчок в окне:’) и с окном редактора Edit2 - для ввода фами­лии. В процессе ввода требуемой фамилии вызывается метод Edit2Change с операторами:

Table1.IndexFieldNames := ‘FIO’; // - индекс искомого столбца

Table1.FindNearest([Edit2.Text]); // - поиск ближайшего подходящего.

По завершении постепенного поиска фамилии и двойного щелчка в окне Edit2 вызывается метод Edit2DblClick, с помощью которого панель Panel3 дела­ется невидимой оператором: PaneB3.Visible := False;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]