- •Методические указания по выполнению индивидуальных заданий на курсовое проектирование «Алгоритмические языки»
- •Организация баз данных в среде программирования Delphi Создание баз данных в среде Delphi
- •Средства для работы с базами данных
- •Инструментальные средства
- •Компоненты
- •Технология создания приложения
- •Создание таблиц базы данных
- •Создание формы приложения
- •Практические занятия:
- •Часть 1
- •Часть 2
- •Часть 3
- •Процедура:
- •Часть 4
- •Часть 5 Поиск записей
- •Часть 6
- •Создайте динамический псевдоним для своей базы данных. Сохраните изменения.
- •Задания на курсовое проектирование
Часть 2
Для удобной работы с набором данных его записи можно отсортировать. Сортировка - это упорядочение записей по определенному полю в порядке возрастания или убывания значений, содержащихся в этом поле. Для примера рассмотрим сортировку записей в созданной БД по двум полям: Фамилия и Пол.
Для сортировки данных добавить к форме (Form1) компонент RadioGroup. В поле Caption ввести «Сортировать». В поле Items нажать на кнопку с тремя точками и в появившемся окне ввести две строки: по фамилии и по полу. Нажать кнопку ОК.
Выделить RadioGroup1 и выбрать закладку Events.
Щелкнуть дважды в поле OnClick.
В окне Редактор кода написать тело процедуры:
Case RadioGroup1.ItemIndex of
0: Table1.IndexName:= ‘indName’;
1: Table1.IndexName:= ‘indPol’;
end;
Сохранить изменения.
Запустить проект на выполнение, просмотреть результаты, закрыть приложение.
Часть 3
Для удобства работы с БД можно создать меню (или панель инструментов) и присвоить его пунктам действия, выполняемые компонентом DBNavigator. Процесс создания главного меню рассмотрен выше. Для работы с созданной БД создадим меню, которое имеет следующую структуру:
Файл:
Выход.
Действия:
Вставить новую запись;
Удалить текущую запись;
Редактировать текущую запись;
Перейти к предыдущей записи;
Перейти к следующей записи;
Перейти к первой записи;
Перейти к последней записи.
После создания меню с помощью Конструктора меню, необходимо написать процедуры на каждый пункт меню.
Пункт меню Вставить новую запись.
Процедура:
DBNavigator1.BtnClick(nbInsert);
Пункт меню Удалить текущую запись.
Процедура:
DBNavigator1.BtnClick(nbDelete);
Пункт меню Редактировать текущую запись.
Процедура:
DBNavigator1.BtnClick(nbEdit);
Пункт меню Перейти к предыдущей записи.
Процедура:
DBNavigator1.BtnClick(nbPrior);
Пункт меню Перейти к следующей записи.
Процедура:
DBNavigator1.BtnClick(nbNext);
Пункт меню Перейти к первой записи.
Процедура:
DBNavigator1.BtnClick(nbFirst);
Пункт меню Перейти к последней записи.
Процедура:
DBNavigator1.BtnClick(nbLast);
Сохранить изменения и запустить проект на выполнение.
Часть 4
Каждая таблица БД и, следовательно, каждый набор данных приложения имеет собственную структуру, которая определяется совокупностью полей. Каждое поле набора данных представляет собой объект, содержащий описание типа данных, которому должно соответствовать значение, находящееся в записи на определенном месте. Иначе, полем можно назвать совокупность ячеек с данными конкретного типа, расположенных в одном и том же месте каждой записи набора данных, или попросту — это столбец в таблице.
В наборе данных приложения баз данных Delphi каждому полю соответствует собственный объект. Основой объектов полей является класс TFieid, который инкапсулирует основные свойства абстрактного поля, не зависящего от типа данных. От этого базового класса порождены другие класса, обеспечивающие функционирование реальных объектов полей, зависящих от типа данных.
В Delphi предусмотрено два способа создания объектов полей.
Динамические поля используются программой в случае, если разработчик не создал для них объекты явным образом на этапе разработки. Каждый не заданный явно объект поля автоматически создается при открытии набора данных в соответствии со структурой связанной таблицы БД. Динамические поля используются в случаях, когда заданные характеристики полей в таблице базы данных полностью удовлетворяют разработчика и нет необходимости рассматривать какое-либо поле вне набора данных.
Статические поля создаются программистом на этапе разработки, их свойства доступны в Инспекторе объектов, а их названия можно выбрать из списка объектов активной формы в верхней части Инспектора объектов. Название статического объекта поля обычно складывается из названий таблицы и поля, например ordersCUSTNO.
Создаются статические объекты полей при помощи специализированного Редактора полей, который вызывается двойным щелчком на компоненте набора данных на форме или командой Fields Editor из всплывающего меню этого компонента.
Редактор полей представляет собой простой список уже созданных статических полей. Все управление осуществляется командами из всплывающего меню. В верхней части окна Редактора расположены кнопки навигатора для перемещения по набору данных, которые активны только при открытом наборе данных.
Добавить к списку статических полей новое поле, существующее в таблице БД, можно при помощи команды Add fields из всплывающего меню Редактора. Удаление элемента из списка осуществляется клавишей <Delete>. Перетаскиванием элементов списка при помощи мыши можно изменить их расположение. Таким образом можно создавать произвольные комбинации статических полей.
Примечание
Как только для набора данных создан хотя бы один статический объект поля, считается, что набор данных содержит только те поля, которые имеются в списке статических полей. Эту особенность можно использовать для искусственного ограничения структуры данных таблиц. Все поля набора данных расположены в том порядке, как это указано в списке Редактора полей, независимо от их реального положения в таблице базы данных.
Команда New field из всплывающего меню Редактора полей позволяет создать статическое поле, которое реально не существует в структуре данных таблицы (рис. 13.3). Для выбора типа поля используется группа радиокнопок Field Type:
Data — поле данных;
Calculated — вычисляемое поле;
Lookup — поле синхронного просмотра.
Реже создаются поля данных, которые обязательно должны базироваться на реальных полях таблицы. Если для такого объекта соответствующее поле в таблице будет удалено или его тип данных будет изменен, то при открытии набора данных генерируется исключительная ситуация.
Вычисляемые поля
Вычисляемые поля существенно облегчают разработку приложений баз данных, т. к. позволяют получать новые данные на основе существующих, не изменяя при этом структуру таблиц БД. Выражения для получения значений вычисляемых полей разработчик должен разместить в методе-обработчике OnCalcFields набора данных. Здесь можно использовать любые арифметические, логические операции и функции, любые операторы языка, свойства и методы любых компонентов, в том числе запросы SQL:
procedure TForml.TablelCalcFields(DataSet: TDataSet);
begin
with Tablel do
TabielCalcFieldl.Value := Fields[0].Value + Fields[1].Value;
end;
Метод OnCalcFields выполняется при открытии набора данных, при переходе в режим редактирования, при передаче фокуса между компонентами отображения данных или колонок сетки, при удалении записи. Но для этого нужно, чтобы свойство AutoCaicFields набора данных было равно значению True.
Для создания вычисляемого поля достаточно в диалоге создания нового поля Редактора полей в качестве типа поля задать "вычисляемое", в остальном процесс совпадает с созданием поля данных.
В выражениях вычисляемых полей можно использовать другие вычисляемые поля, но они обязательно должны быть определены в методе OnCalcFields до этого.
Создадим вычисляемое поле, в котором будет по дате рождения определяться возраст человека на данный момент:
Щёлкнем два раза на компоненте Table1. В появившемся редакторе кликнем правой кнопкой и выберем команду New field. Даём полю название на латинском языке, например vozrast. Тип данных – integer, тип поля – сalculated.
Добавим также правым щелчком поля, которые будут отображаться в таблице. При выделении поля в редакторе, в окне свойств отображаются свойства именно этого поля. Изменим подписи в шапке таблицы, меняя свойство поля DispiayLabel.
Для вычисляемого поля vozrast создадим процедуру (в событиях компонента Tablel):
procedure TForml.TablelCalcFields(DataSet: TDataSet);
begin
table1vozrast.Value := date - table1Date.Value;
end;
4. Запустим проект на выполнение, сохраним результаты.
