УКАЗАНИЯ ПО ОФОРМЛЕНИЮ ОТЧЕТА
И КОНТРОЛЬНЫЕ ВОПРОСЫ
5.1. Отчет по лабораторной работе должен содержать:
1. Наименование.
2. Цель работы.
3. Используемое оборудование.
4. Теоретическая часть.
5. Распечатка программного кода вашей программы.
6. Выводы по проделанной работе.
Контрольные вопросы
1. Какова иерархия компонента TDataSet?
2. Какими способами можно открыть и закрыть таблицу?
3. Назовите функции перемещения по базе данных.
4. Какие свойства и методы имеются в Delphi 6 для доступа к полям данным?
5. Назовите методы работы с данными.
Лабораторная работа № 2
Программирование работы с базами данных
Общее описание работы
1.1. Цель работы: состоит в изучении принципов программирования баз данных.
Содержание работы
Лабораторная работа состоит из домашнего и лабораторного заданий. Домашнее задание заключается в изучении принципов программирования баз данных. Лабораторное задание включает написание программы на языке Delphi с выполнением всех изученных в домашнем задании данных.
Используемое оборудование
Для выполнения лабораторной работы используются программно-аппаратные средства: ПЭВМ класса Pentium стандартной конфигурации, цветной монитор с графическим адаптером VGA и выше, объем оперативной памяти не ниже 64 Мб, ОС Windows 98 и выше, не менее 40 Mb свободного объема на жестком диске.
Домашнее задание и методические указания по его выполнению
По методическому руководству ознакомиться с принципами программирования баз данных с помощью языка программирования Delphi 6.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Вычисляемые поля
Теперь попробуем сформировать в таблице новое поле, не предусмотренное при ее создании, значение которого вычисляется на основании значений других полей записи. Подобные поля называются вычисляемыми полями. Пусть в нашем примере мы хотим добавить поле, вычисляющее цену за весь полученный или купленный товар.
Если в свойстве Active Table1 - выставитеfalse. Щёлкните дважды по компоненту Table1 и в появившемся окне в сплывающем меню выберите пункт New Field. В окне свойств нового поля заполни следующие поля:
Name (имя нового поля) – назовём поле Sum.
Type (тип поля) – у нас будет числовая сумма, поэтому выбираем тип Integer.
Field Type (тип поля) – выбираем Calculated, чтобы создать вычисляемое поле.
На рис. 2.1 можно увидеть заполненное окно свойств созданного нового поля. Как только поле создано, таблицу снова можно делать активной.
Теперь выделяем компонент Table1 и создаем обработчик события OnCalcFields. Это событие вызывается каждый раз, когда надо пересчитать вычисляемые поля. Оно будет вызываться для всех видимых пользователю записей. В этом обработчике напиши следующее:
procedure TDataModule1.Table1CalcFields(DataSet: TDataSet);
begin
Table1Itog.Value:=Table1Kolvo.AsInteger*Table1Price.AsInteger;
end;
Прежде чем разбираться с этим кодом, откройте окно редактора свойств полей таблицы Table1 и посмотри имена (свойство Name) полей Кол-во, Цена и Итого. Это Table1kolvo, Table1price и Table1Itog соответственно. С помощью этих имён можно обращаться к значениям, находящимся в полях. Надо только написать имя поля и вызвать один из его методов для преобразования значения в нужный формат, доступны следующие методы полей:
Рис. 2.1. Ввод информации о вычисляемом поле
AsInteger – получить значение, хранящееся в данном поле в виде числа.
AsDateTime – в виде объекта TDateTime.
AsBoolean – в виде булева значения.
AsCurrency – в виде цены.
AsFloat – в виде вещественного значения.
AsString – в виде строки.
AsVariant – в виде типа Variant. Это универсальный тип, который может принимать любые значения, хоть число, хоть строку, в общем, любые доступные типы.
Теперь посмотрим на код, и сразу же встанет всё понятно. Здесь мы записываем в свойство Value поля Table1Itog результат перемножения значений полей цены и количества. Значения полей получаются как целые числа – AsInetger.
Всё!!! Программа готова. Запускаем и попробуем ввести в базу несколько полей. На рис. 2.2 можно увидеть окно результата работы примера.
Кстати, поле итога не должно изменяться пользователем вручную, потому что оно вычисляемое. Именно поэтому ты даже не сможешь туда ввести никакого значения. Delphi просто блокирует любые такие попытки, хотя поле и не имеет признака «Только для чтения» (ReadOnly).
Рис. 2.2. Результат работы программы
Фильтрация данных
Компонент Table позволяет не только отображать и редактировать данные, но и отфильтровать записи по определенным критериям. Пользователю в нашем примере могло бы захотеться иметь возможность просматривать не всю базу данных, а отдельно записи по тому или иному покупателю или продавцу.
Фильтрация может задаваться свойствами Filter, Filtered и FilterOptions компонента Table. Свойство Filtered включает или выключает использование фильтра. А сам фильтр записывается в свойство Filter в виде строки, содержащей определенные ограничения на значение поля. Например, Вы можете задать в свойстве Filter:
Pokupatel=’ООО «Свет»’
установить свойство Filtered в true и увидите, что уже в процессе проектирования в таблице отобразятся только те записи, в которых поле Porupatel имеет значение ООО «Свет».
При задании фильтров также можно пользоваться символом «*». Он обозначает: «Любое количество любых символов». Также при записи условий можно использовать операции отношения: =, >,>=,<,<=,<>, а также логические операции and, or или not.
Например, Вы можете написать фильтр:
(Pokupatel=’ООО «Свет»’)and(Itog>10000)
Конечно, свойства, определяющие фильтрацию, можно задавать не только в процессе проектирования, но и программно, во время выполнения. Введем такую возможность в наше приложение. Приведите форму к виду, показанному на рис. 2.3.
В обработчик кнопки «Обновить» запишем следующую процедуру:
procedure TForm1.Button5Click(Sender: TObject);
begin
if (RadioButton1.Checked=true) or (Edit1.Text='') then
begin
Table1.Filtered:=false;
end;
if (RadioButton2.Checked=true) and (Edit1.Text<>'') then
begin
With Table1 do
begin
Filtered:=false;
Filter:='Pokupatel='+char(39)+Edit1.text+char(39);
Filtered:=true;
end;
end;
if (RadioButton1.Checked=true) and (Edit1.Text<>'') then
begin
With Table1 do
begin
Filtered:=false;
Filter:='Prodavec='+char(39)+Edit1.text+char(39);
Filtered:=true;
end;
end;
end;
Рис. 2.3. Приложение с возможностью фильтрации
записей