
- •Лабораторная работа №6 (8 часов) Работа с локальными базами данных и несвязанными таблицами
- •6.1. Приложение для работы с локальной базой данных
- •6.1.1. Цель работы
- •6.1.2. Задание на выполнение работы
- •6.1.3. Процесс разработки приложения
- •6.1.4. Создание псевдонима базы данных
- •6.1.5. Разработка структуры записи таблицы базы данных
- •6.1.6. Разработка основной формы и ее компонентов для работы с бд
- •6.1.6.1. Размещение и настройка основных компонентов
- •6.1.6.2. Размещение и настройка панелей
- •6.1.6.3. Настройка компонента dbGrid1
- •6.1.6.4. Формирование вычисляемого поля
- •6.1.6.5. Дополнение формы окнами из редактора полей таблицы
- •6.1.7. Формирование основного меню
- •6.1.8. Методы подменю Показать данные
- •6.1.9. Методы для сортировки данных
- •6.1.10. Методы для поиска данных
- •6.1.11. Выполнение команд подменю ‘Вычислить:’
- •6.1.12. Метод команды меню Трафик' и настройка графика
- •6.1.13. Выполнение команд подменю Отчет
- •6.1.13.1. Формирование отчета
- •6.1.13.2. Методы подменю Отчет
- •6.1.14. Листинги примера проекта
- •6.1.15. Варианты заданий на работу с локальными базами данных
- •6.1.16. Контрольные вопросы
- •6.2. Приложение для соединения данных двух таблиц 1:1
- •6.2.1. Цель и задание на выполнение работы
- •6.2.2. Процесс разработки приложения
- •1) Установка русификатора для работы с таблицами типа Paradox7;
- •6.2.4. Контрольные вопросы
- •6.3. Приложение для формирования, слияния и разъединения однотипных таблиц баз данных
- •6.3.1. Цель и задание на выполнение работы
- •6.3.2. Процесс разработки приложения
- •6.3.3. Метод для работы с данных двух таблиц
- •6.3.4. Контрольныевопросы
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;