- •Кнопки BitBtn
- •Компонент MaskEdit
- •Тема: «Работа с текстовыми файлами». TStringList. Общие принципы работы с файлами»
- •Общие принципы работы с файлами
- •Тема: «Файлы»
- •Задание
- •Тема «Записи»
- •Тема: «Динамические массивы»
- •Задание
- •Тема: «Многомерные массивы. Сетка строк StringGrid»
- •Сетка строк StringGrid
- •Тема: «Украшательства проект. Image. ImageList»
- •Самостоятельное задание
- •Тема: «Мультимедиа в Delphi»
- •Тема: «Побайтовое копирование / перенос файлов»
- •Тема: «Панель инструментов. Кнопка SpeedButton. Перемещаемые панели инструментов»
- •Кнопка SpeedButton
- •Перемещаемые панели инструментов
- •Тема: «ActionList и mdi-окна»
- •Тема: «Введение в базы данных. Базы Данных. Bde. Навигация. Типы данных»
- •Навигация
- •Типы данных
- •Закладки (Bookmarks)
- •Свойства bof, eof и циклическая обработка
- •Открытие и закрытие таблицы или связанных таблиц
- •Свойства RecordCount и RecNo таблицы
- •Создание собственной таблицы
- •Тема: «Методы редактирования баз данных»
- •Самостоятельное задание
- •Тема: «Индексы. Подсчет данных. Подстановочные поля. Фильтрация данных. Отчетность» Индексы
- •Подсчет данных
- •Подстановочные поля
- •Фильтрация данных
- •Отчетность
Подсчет данных
Улучшим пример, подсчитав общее количество книг и их сумму. Для этого в модуле DM создайте переменную – закладку. Она нам необходима для того, чтобы после подсчета возвращаться к записи, откуда вызвана процедура пересчета. И переменная должна находится там же, где определены компоненты Table, потому что закладки описываются в этих модулях. Переменная должна быть глобальной:
bm : TBookmarkStr; //закладка
Далее, в главном модуле в разделе Private опишем нашу процедуру:
procedure Itog;
Напишем эту процедуру в самом низу:
procedure TfMain.Itog;
var
all : Integer; //для общ. кол-ва книг
summ : Real; //для общ. суммы
begin
//ставим закладку:
DM.bm := fDM.TBooks.Bookmark;
//обнуляем переменные
all := 0;
summ := 0;
//перемещаемся от начала до конца и сохраняем результат:
fDM.TBooks.First;
while not fDM.TBooks.Eof do begin
all := all + fDM.TBooks['Exemp'];
summ := summ + fDM.TBooks['Exemp'] * fDM.TBooks['Cena'];
fDM.TBooks.Next;
end; //while
//снова переходим на закладку и убираем ее:
fDM.TBooks.Bookmark := DM.bm;
DM.bm := '';
//записываем данные:
Label1.Caption := 'Всего книг: ' + IntToStr(all);
Label2.Caption := 'На общую сумму: ' +
FormatFloat('0,000.00', summ) + ' руб.'; //14 лекция
end;
Сгенерируйте событие onShow для главной формы и там вызовите нашу процедуру:
Itog;
Также добавьте ее вызов из команды меню "Редактирование – Добавить книгу". Теперь мы можем быть уверены, что при добавлении книги пересчет будет правильный.
Подстановочные поля
Иной раз приходится добавлять поле, которого изначально в данной таблице не было. Возьмите главную форму – там у нас выходит поле с номером автора, но не с его фамилией, а пользователю номер вряд ли поможет. Значит, для его удобства нам нужно будет вставить поле, где бы вместо номера выходили фамилия, имя и отчество автора. Это поле мы будем брать из таблицы авторов, подставлять нужные значения и выводить их так, будто изначально они были в первой таблице.
Создание нового поля возможно только при неактивной таблице, поэтому закройте таблицу TBooks (свойство Active переведите в False ).
Щелкните дважды по компоненту TBooks, который находится в модуле DM, чтобы открыть редактор полей. Далее щелкните по свободному месту редактора правой кнопкой и выберите команду "New Field" (новое поле). Появится окно, где мы должны указать все необходимые атрибуты поля.
Рис. 1. Создание нового поля
В поле Name раздела Field properties нужно указать имя нового поля. Назовем его Fio_Avtors. Далее, в поле Type нужно указать тип нового поля, у нас это String, строковое поле для вывода фамилий авторов. В разделе Fieldtype нужно выбрать тип поля, выберем Lookup, это значит, что мы будем брать данные из другой таблицы.
Остался раздел Lookup definition. Здесь в поле Key Fields мы должны указать поле нашей таблицы, откуда мы будем брать значения. У нас это Avtor, здесь хранятся числа – номера авторов. В поле Dataset мы укажем таблицу, откуда будем брать значения, это таблица TAvtors. В поле Lookup Keys укажем начальное поле, которое хранит цифры – номера авторов, поле Key2. А в поле Result Field – результативное поле, значения которого будем подставлять. Это поле FIO.
Далее нажмите кнопку ОК. В редакторе полей перетащите новое поле поближе к полю Avtor, в начало таблицы. Переведите таблицу в активное состояние. Уже в проекте видны недостатки – заголовок подстановочного поля выходит латинскими буквами, и поле Avtor, содержащее цифры, уже не нужно. Снова вызовите редактор полей. Поле Avtor сделайте невидимым ( visible в false ). У поля Fio_Avtors в свойстве DisplayLabel укажите "Авторы". Теперь данные в сетке выходят в удобочитаемом виде. Новое поле никак не влияет на таблицы. Оно необходимо только для вывода данных в нормальном виде.
Далее займемся поиском нужной записи с помощью фильтров.
