Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика_программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.36 Mб
Скачать

Подсчет данных

Улучшим пример, подсчитав общее количество книг и их сумму. Для этого в модуле 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 укажите "Авторы". Теперь данные в сетке выходят в удобочитаемом виде. Новое поле никак не влияет на таблицы. Оно необходимо только для вывода данных в нормальном виде.

Далее займемся поиском нужной записи с помощью фильтров.