double arrow

Автоматизация вычисления значения по полю LenIn (длина дюймах)

Значения по полям LenSm (длина в см) и LenIn (длина в дюймах) отдельной записи весьма просто рассчитываются одно через другое поскольку 1 дюйм = 2,54 см. Поэтому чтобы не вводить такие значения в оба поля, увеличивая себе объем работы, достаточно ввести одно из них, а другое рассчитать через первое. Удобнее заполнять поле LenSm, а LenIn рассчитывать.

Прежде всего запретим в сетке ввод в поле LenIn. Двойным щелчком на сетке вновь вызовем редактор ее колонок (см. рис. 3.21) и свойству ReadOnly (только чтение) колонки LenIn назначим значение true. Теперь в этой колонке нельзя будет изменять значения с клавиатуры. Заметим, что при этом таблице Table1 аналогичное свойство ReadOnly останется в значении false, то есть значение может быть изменено, что мы и будем использовать при вычислении LenIn через LenSm.

Когда же следует выполнять такой расчет? Очевидно, перед тем, как в таблице будут зафиксированы изменения в поле LenSm. В этот момент происходит событие BeforePost (перед сохранением) таблицы Table1. Щелкните на компоненте Table1, затем в Инспекторе объектов на закладке События (Events) дважды щелкните в клетке рядом с названием этого события (рис. 4.1). При этом будет создана заготовка процедуры, в которой нужно объяснить программе, что следует сделать перед сохранением изменений в таблице. Внесите в процедуру текст, который приведен на рис. 4.1.

Рис. 4.1. Программирование расчета длины в дюймах

Поясним, что представляет собой этот программный код. Тело процедуры содержит блок try-except-end. Он работает следующим образом

try
Формулы для вычислений и иных действий
except
Что делать если возникла исключительная ситуация (ошибка)
end

В нашем случае производится расчет с помощью оператора присваивания

Table1LenIn.AsFloat:= Table1LenSm.AsFloat/2.54;

Значение поля Table1LenIn (полное имя поля, то есть " имя таблицы " + " имя поля ") следует рассчитывать как вещественное число (AsFloat - как вещественное число) для текущей записи (на ней стоит указатель в таблице Table1 и в сетке DBGrid1). Результат определяется умножением значения Table1LenSm. AsFloat на число 2,54.

В случае если по каким-то причинам такой расчет привет к непредвиденной ошибке, сработает сегмент except-end. При этом действия по вычислению будут отменены и на экран будет выброшено окошко с сообщением о том, что произошла ошибка. Ниже на рис. 4.2 приведет пример состояния сетки после таких вычислений.

Рис. 4.2. Отображение данных, содержащих неформатированную колонку

Видно, что в клетках колонки LenIn находится непонятный набор цифр. В действительности же, в этих клетках записаны правильные числа, однако они содержат слишком большое количество цифр в дробной части, что затрудняет визуальное восприятие таких данных. К примеру,если разделить 50 на 2,54 то получится 19,6850393700787 - число с большим количеством знаков в дробной части. Именно такие числа и отображены в колонке LenIn сетки. Чтобы исправить положение следует задать формат вывода данных в колонке. Для этого нужно дважды щелкнуть на Table1 и для поля LenIn установить значение свойства DisplayFormat в 0.00 (два знака в дробной части). Эта ситуация показана рисунке справа.

Теперь сетка примет желаемый вид (рис. 4.3).

Рис. 4.3. Отображение данных с форматированной колонкой


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: