- •1.1. Создание базы данных в Access 2003
- •1.2. Создание таблицы в режиме Конструктор
- •1.3. Редактирование структуры таблицы
- •1.4. Создание и редактирование схемы данных
- •1.5. Создание базы данных, таблиц и схемы данных в Access 2007
- •1.8. Защита пункта меню паролем
- •1.9. Редактирование внешнего вида формы
- •2.1. Создание формы для работы с одной таблицей
- •2.2. Ввод данных в таблицу с помощью созданной формы
- •2.3. Создание формы для работы с двумя таблицами
- •2.4. Редактирование формы
- •2.5. Ввод данных через отдельные компоненты
- •2.6. Редактирование данных через компоненты
- •3. Реализация сортировки, вычислений и фильтрации данных
- •3.1. Реализация сортировки
- •3.2. Реализация вычислений
- •3.3. Реализация фильтрации записей
- •4.3. Создание запроса с групповыми вычислениями
- •4.4. Создание параметрического запроса
- •4.5. Параметрический запрос для поиска поля, выбранного из списка
- •4.6. Параметрический запрос для поиска даты, выбранной из списка или введенной в поле ввода
- •5.1. Создание отчета в Delphi
- •5.2. Создание отчета с группировкой записей по определенному полю
- •Список книг
- •5.3. Создание отчета на основе параметрического запроса
- •Библиографический список
- •Оглавление
3.2. Реализация вычислений
Для контроля производимых вычислений можно поставить на форму компоненты DataSource и DBGrid и настроить их свойства.
Для компонента DataSource (источник данных) настроить свойство DataSet – имя таблицы, находящейся на модуле данных (в модуле, соответствующем созданной форме для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым)).
Для компонента DbGrid (таблица для отображения информации) настроить свойство DataSource – DataSource1.
Вычисления можно оформить как процедуры, которые запускаются при щелчке по кнопке (компонент Button).
Вывод результата вычислений можно осуществить через компонент Label и его свойство Caption.
Возможный вид формы представлен ниже (рис. 3.2).
Рис. 3.2. Вид формы для реализации вычислений
Вычисление суммарной стоимости книг осуществляется при щелчке по кнопке Вычислить суммарную стоимость книг (Button1). Результат выводится в компонент Label1. Процедура вычисления следующая:
var
sumk: real;
begin
sumk:=0;
имя_модуля_данных.ADOTable1.First;
While not имя_модуля_данных.ADOTable1.eof do
begin
sumk:=sumk+ имя_модуля_данных.ADOTable1['Zena'] * имя_модуля_данных.ADOTable1['Kol_ikz'];
имя_модуля_данных.ADOTable1.Next;
end;
Label1.Caption:='Суммарная стоимость='+FloatToStr(sumk);
Вычисление максимальной стоимости книг осуществляется при щелчке по кнопке Максимальная цена (Button2). Результат выводится в компонент Label2. Процедура вычисления следующая:
var
max: real;
begin
имя_модуля_данных.ADOTable1.First;
max:= имя_модуля_данных.ADOTable1 ['Zena'];
While not имя_модуля_данных.ADOTable1.eof do
begin
if max < имя_модуля_данных.ADOTable1 ['Zena'] then max:= имя_модуля_данных.ADOTable1 ['Zena'];
имя_модуля_данных.ADOTable1.Next;
end;
Label2.Caption:='max='+FloatToStr(max);
Вычисление минимального количества книг осуществляется при щелчке по кнопке Минимальное количество книг (Button3). Результат выводится в компонент Label3. Процедура вычисления следующая:
var
min:integer;
begin
имя_модуля_данных.ADOTable1.First;
min:= имя_модуля_данных.ADOTable1['Kol_ikz'];
While not имя_модуля_данных.ADOTable1.eof do
begin
if min > имя_модуля_данных.ADOTable1['Kol_ikz'] then min:= имя_модуля_данных.ADOTable1['Kol_ikz'];
имя_модуля_данных.ADOTable1.Next;
end;
Label3.Caption:='min='+IntToStr(min);
3.3. Реализация фильтрации записей
Фильтрация по заданному выражению, числовому полю, текстовому полю осуществляется следующим образом.
Необходимо создать форму следующего вида (рис. 3.3).
На форму помещены компоненты:
DataSource1, DBGrid1, настроить их свойства;
в модуле, соответствующем созданной форме для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым);
надпись Label1 (в свойстве Caption написать Выражение фильтра);
компонент Edit1 (свойство Text стереть) используют для ввода выражения фильтрации;
компонент кнопка Button1 (Caption – Фильтровать);
компонент кнопка Button2 (Caption - Все записи);
компонент кнопка Button3 (Caption – Цена >);
компонент Edit2 (свойство Text стереть) используют для ввода цены;
компонент Button4 (Caption – Фильтровать по цене);
компонент Label2 (в свойстве Caption написать Введите автора);
компонент Edit3 (свойство Text стереть);
компонент Button5 (Caption – Фильтровать по автору).
Рис. 3.3. Вид формы для фильтрации записей
С данной формой необходимо связать следующие обработчики событий.
Процедура для кнопки «Все записи».
Имя_модуля_данных.ADOTable1.Filtered:=False; (*отключение фильтрации*)
Edit1.Text:=’’; (*очистка поля от введенного фильтра*)
Процедура для кнопки «Фильтровать».
Имя_модуля_данных.ADOTable1.Filtered:=True; (*включение фильтрации*)
Имя_модуля_данных.ADOTable1.Filter:=Edit1.Text; (*определение условия фильтрации*)
Примеры выражений фильтра:
Obl_zn=’Базы данных’
Zena > 300
(Zena > 300) and (God > 2003)
Avt = ‘Ф*’
Zena = 500 or Zena=450
Процедура для формы в целом (событие Создание формы).
begin
Имя_модуля_данных.ADOTable1.FilterOptions:=[foCaseInsensitive]; (*регистр букв не учитывается*)
Имя_модуля_данных.ADOTable1.Filtered:=False; end;
Фильтрация по числовому значению осуществляется с помощью процедуры следующего вида:
Имя_модуля_данных.ADOTable1.Filtered:=True; Имя_модуля_данных.ADOTable1.Filter:='Zena>'+Edit2.Text;
Фильтрация по тексту выполняется следующим образом.
var a: string[20];
begin
Имя_модуля_данных.ADOTable1.Filtered:=True;
a:='Avt='; Имя_модуля_данных.ADOTable1.Filter:=a+''''+Edit3.Text+''''; (*чтобы поставить ‘ надо поставить две ‘*)
end;
Фильтрация по дате. Для реализации данной фильтрации можно создать форму следующего вида (рис. 3.4).
Рис. 3.4. Вид формы для фильтрации по дате
Дата выдачи – это компонент Label1.
Дата создана как компонент DateTimePicker1 (вкладка Win32). При щелчке по кнопке раскрывающегося списка выводится календарь для выбора даты.
Кнопки Показать (Button1), Все записи (Button2), Выход (Button3).
Для кнопки Показать создан следующий обработчик событий.
var
a:string[20];
begin
Имя_модуля_данных.ADOTable1.Filtered:=True;
a:=DateToStr(DateTimePicker1.Date);
Имя_модуля_данных.ADOTable1.Filter:='Dat_vid='+''''+a+'''';
end;
Для кнопки Все записи создан следующий обработчик событий.
Имя_модуля_данных.ADOTable1.Filtered:=False;
Для формы в целом создан следующий обработчик событий.
Имя_модуля_данных.ADOTable1.Filtered:=False;
4. СОЗДАНИЕ ЗАПРОСОВ
4.1. Создание запросов на выборку данных
Для создания запроса на выборку данных поступают следующим образом.
1. Создать или выбрать форму для реализации запроса (создание - кнопка New Form на панели инструментов (4-я слева), выбор – кнопка Veiw Form (2-я слева на панели инструментов)). В свойствах формы в поле Name можно задать имя, например, Query1Form.
2. Расположить на модуле данных компонент ADOQuery (панель ADO). Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке … и в открывшемся окне набрать запрос на языке SQL; в свойстве Active выбрать true.
Во вкладке Events модуля данных для события onCreate в процедуре обработки события дописать:
ADOQuery1.Active := true;
Номер компонента может быть отличным от единицы.
3. Расположить на форме для реализации запроса компоненты DataSource (панель Data Access), DBGrid (панель Data Controls).
4. В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).
5. Установить для компонента DataSource – в свойстве DataSet имя компонента на модуле данных, реализующего запрос, (например, имя_модуля_данных.ADOQuery1 (номер компонента может быть другим)), для DBGrid – в свойстве DataSource значение DataSource1.
Примеры запросов на языке SQL на выборку данных.
Выбрать все поля из таблицы Students, где поле Фамилия (Fio) начинается с буквы Б:
Select S.* from Students S
where Fio like ‘Б%’;
Выбрать все поля из таблицы Students, где поле Фамилия (Fio) начинается с буквы Б или В:
Select S.* from Students S
where (Fio like ‘Б%’) or (Fio like ‘В%’);
Выбрать все поля из таблицы Students, где поле Фамилия (Fio) совпадает со значением Антонов:
Select S.* from Students S where Fio = ‘Антонов’;
Выбрать все поля из таблицы Students, где поле Дата рождения (D_r) совпадает с 09.05.1986:
Select S.* from Students S where D_r = ’09.05.1986’;
Выбрать все поля из таблицы Students, где поле Дата рождения (D_r) попадает на август или сентябрь 1987 года:
Select S.* from Students S
where D_r between ’01.08.1987’ and ’30.09.1987’;
Выбрать все поля из таблицы Students, где поле Стипендия (Stip) равно 600 и поле Шифр группы (Shifr_gr) начинается с букв ВМ:
Select S.* from Students S
where (Stip=600) and (Shifr_gr like ‘ВМ%’);
Выбрать все поля из таблицы Students и поля Факультет (Fact) и Специальность (Spec) из таблицы Gruppa, таблицы связаны по полю Шифр группы (Shifr_gr):
Select S.* , G.Fact, G.Spec
from Students S, Gruppa G
where S.Shifr_gr = G.Shifr_gr;
6. Чтобы выполнить запрос, необходимо в модуле данных установить для ADOQuery в свойстве Active значение True. Результат выполнения запроса будет виден в компоненте DBGrid на форме для реализации запроса.
7. Сохранить произведенные изменения (File, Save All).
4.2. Создание запроса с вычисляемым полем
Для создания запроса с вычисляемым полем поступают следующим образом.
1. Создать или выбрать форму для реализации запроса (создание - кнопка New Form на панели инструментов (4-я слева), выбор – кнопка Veiw Form (2-я слева на панели инструментов)). В свойствах формы в поле Name можно задать имя, например, Query2Form.
2. Расположить на модуле данных компонент ADOQuery (панель ADO). Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке … и в открывшемся окне набрать запрос на языке SQL; в свойстве Active выбрать true.
Во вкладке Events модуля данных для события onCreate в процедуре обработки события дописать:
ADOQuery1.Active := true;
Номер компонента может быть отличным от единицы.
3. Расположить на форме для реализации запроса DataSource (панель Data Access), DBGrid (панель Data Controls).
4. В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).
5. Установить для компонента DataSource – в свойстве DataSet имя компонента на модуле данных, реализующего запрос, (например, имя_модуля_данных.ADOQuery1 (номер компонента может быть другим)).
Установить для DBGrid – в свойстве DataSource значение DataSource1.
Пример запроса с вычисляемым полем, данные выбираются из двух таблиц Tovary и Prihod, которые связаны между собой по полю Tovar (выбираются поля DatPrih, Tovar, Kolvo из таблицы Prihod (второе имя P) и поле Zena из таблицы Tovary (второе имя T):
SELECT P.DatPrih, P.Tovar, P.Kolvo, T.Zena,
(P.Kolvo * T.Zena) As Stoim
FROM Tovary T, Prihod P
WHERE T.Tovar = P.Tovar;
Запрос вычисляет стоимость товара, умножив количество (Kolvo) на цену (Zena). Вычисляемое поле получает имя Stoim.
Конструкция FROM Tovary T, Prihod P задает для таблиц вторые имена Т и Р.
Конструкция WHERE T.Tovar = P.Tovar задает условие соединения двух таблиц.
5. Чтобы выполнить запрос, необходимо в модуле данных установить для ADOQuery в свойстве Active значение True. Результат выполнения запроса будет виден в компоненте DBGrid на форме для реализации запроса.
6. Сохранить произведенные изменения (File, Save All).