Вычисляемые поля

Вычисляемые поля не входят в состав конкретной таблицы физической БД, но могут быть присоединены к НД, связанному с этой таблицей. Эти поля могут быть присоединены к НД типа TTable и TQuery.

Они предназначены для отображения данных, которые вычисляются в ходе выполнения программы обычно с помощью значений из других полей той же записи (строки в таблице НД). После присоединения вычисляемого поля к НД, оно становится во всем подобно обычным объектам-полям, связанным с реальными полями таблицы БД, за одним исключением - такие поля нельзя редактировать, а при вводе новой записи помещать в них какое-либо значение.

Для создания вычисляемого поля нужно открыть окно New Field (см. рисунок 3.25) редактора полей и, заполнив строки Name, Type и Size, установить переключатель Calculated и закрыть окно щелчком на кнопке ОК. Заполнение вычисляемых полей осуществляется в обработчике события OnCalcFields соответствующего НД.

Рассмотрим пример создания вычисляемого поля. В разработанной ранее программе используется таблица MOVEBOOK (НД tbMove) для отображения списка книг, связанных с накладной. В этой таблице есть поля, в которых указывается количество экземпляров книги MQuan (объект-поле tbMoveMQuan) и ее цена MPrice (объект-поле tbMoveMPrice). Создадим для НД tbMove вычисляемое поле MSumm, в котором укажем сумму покупки/продажи каждой книги.

Рисунок 3.30 – Столбец "Сумма" в нижней сетке отображает вычисляемое поле

Вызовите редактор объектов-полей двойным щелчком на НД tbMove в окне модуля данных и затем в контекстном меню редактора выберите команду New Field. Введите в строку Name окна New Field название поля MSumm, в списке Туре выберите денежный тип (currency), установите переключатель Calculated и закройте окно щелчком на кнопке ОК. Если сейчас вызвать инспектор объектов, он будет отображать свойства и события вновь созданного объекта-поля tbMoveSumm.

Нам нужны свойства и события НД tbMove. Щелкните на НД tbMove, чтобы инспектор объектов показал свойства этого НД. Перейдите на вкладку Events.

Дважды щелкнув в правой части строки события OnCalcFields.

Рисунок 3.31 –

Delphi cоздаст в модуле dmNaklsU заготовку для обработчика событий OnCalcFields. Напишите в ней такой обработчик события OnCalcFields:

procedureTDM.tbMoveCalcFields(DataSet: TDataSet);