Операции с полями
Begin
Table1Total.AsFloat:=Table1.FieldByName('Price').AsFloat*
Table1.FieldByName('Number').AsInteger;
Table1TotalUE.AsFloat:=Table1Total.AsFloat/25;
end;
Если в качестве обменного курса взять некоторое реальное значение, например, 28.79, то значения поля TotalUE будут содержать большое количество дробных разрядов. Поэтому необходимо округлить получаемые значения или выводить полученные значения в требуемом формате. Для форматирования значений можно использовать свойство DisplayFormat этого поля, установив его через Инспектор объектов или при создании формы, например, следующим оператором:
Table1TotalUE.DisplayFormat:='#####.##';
Поле выбора предоставляет возможность выбора одного значения из предлагаемого списка и автоматического занесения информации в заданное поле модифицируемой записи. С полем выбора связывается специальный список, заполняемый значениями указанного поля из второго набора данных. Оба набора данных связываются по полю (полям) связи.
Необходимость использования поля выбора может возникнуть в случае, когда при поступлении товара ведется таблица реестра, в которую заносится такая, например, информация (в скобках приведены названия полей таблицы):
· уникальный номер записи (r_n);
· дата поступления товара (R_Date);
· уникальный код товара (R_Code);
· количество поступившего товара (R_Number);
· примечание (R_Note).
Данные о каждом конкретном товаре хранятся в другой таблице, имеющей поля:
· уникальный код товара (G_Code);
· название товара (G_Name);
· единица измерения товара (G_unit);
· цена единицы товара (G_Price);
· примечание (G_Note).
В таблице данных о товаре поле уникального кода товара (G_Code) является автоинкрементным — его значение формируется автоматически при добавлении нового товара. При добавлении новой записи в таблицу реестра в поле кода товара (R_Code) должен заноситься код поступившего товара. Для установления соответствия между поступившими товарами и их характеристиками обе таблицы связываются по этим полям. Однако при занесении нового товара в реестр пользователь должен самостоятельно задавать код, соответствующий поступившему товару. Эта операция неудобна для пользователя, т. к. нужно знать эти коды, и может привести к ошибкам.
Более удобным вариантом в данном случае будет формирование поля выбора, содержащего товары, из которого пользователь выбирает одно из наименований. Тогда после выбора товара соответствующий код будет заноситься в поле R_Code таблицы реестра автоматически. Окно создания поля выбора показано на рис. 7.10.
Рис. 7.10. Окно создания поля выбора
Поле выбора названо R_Name и принадлежит набору данных Table1, содержащему записи таблицы реестра. Для формирования списка выбора используется поле G_Name набора данных Tаblе2, содержащего записи таблицы данных товара. Связь между двумя наборами данных Table1 и Table2 осуществляется через их поля кода товара R_Code и G_Code, соответственно (рис. 7.11).
Использование поля выбора заключается в том, что пользователь выбирает значение из поля R_Name, содержащего список, который построен на основании значений поля G_Name. После выбора значения для поля R_Name из поля связи G_Code автоматически заносится соответствующее значение в поле R_Code. Таким образом, поле R_Name, содержащее список, используется для выбора, а поле связи r _Code — для занесения в него значения.
Замечание
Поля связи не обязательно должны быть индексными.
В частном случае поле выбора и поле связи могут быть одним и тем же полем. Это может потребоваться, например, в случае, когда нет необходимости автоматически вводить код для выбранного значения, а достаточно просто выбрать значение из списка.
На рис. 7.12 демонстрируется использование поля выбора. В верхней части формы отображается таблица реестра, в нижней — таблица данных, которая приведена для наглядности. На практике связанный набор данных обычно не показывается. При выборе значений из списка в поле выбора для связанного набора данных текущий указатель устанавливается на запись, из которой было выбрано значение.
Рис. 7.11. Схема использования поля выбора
Рис. 7.12. Использование поля выбора
При изменении набора данных, по полю которого построен список выбора, автоматического изменения списка не происходит. Обновление списка выбора является обязанностью программиста, его удобно выполнять с помощью метода RefreshLookupList.
Через объект типа TField разработчик может:
· обратиться к полю и его значению;
· проверить тип и значение поля;
· отформатировать значение поля, отображаемое или редактируемое в визуальных компонентах.
При этом динамические и статические поля имеют одинаковые свойства, события и методы, с помощью которых можно управлять этими объектами при выполнении приложения. В связи с тем, что статические поля определяются на этапе разработки, многие их свойства доступны через Инспектор объектов.
Доступ к значению поля
Объект поля, как и любой другой объект, имеет имя (название), определяемое его свойством Name типа String. Имя объекта Field зависит от того, является ли поле динамическим или статическим. По умолчанию для динамического поля имя объекта Field совпадает с именем соответствующего физического поля таблицы БД, для которого создан объект, и не может быть изменено. Имя статического поля является составным и по умолчанию образуется путем слияния имен набора данных и имени физического поля таблицы БД. Например, если для физического поля Name набора данных Table1 с помощью Редактора полей создано статическое поле, то оно получит имя Table1Name. Программист может изменить это имя через Инспектор объектов, когда соответствующее статическое поле выбрано в Редакторе полей.
В отличие от имени объекта Field, свойство FieldName типа String содержит имя физического поля, заданное при создании таблицы. Не следует путать свойства Name и FieldName, они обозначают разные объекты и в общем случае могут не совпадать.
Пример обращения к полю:
Tablel.FieldByName('Number').DisplayLabel:='Количество';
TablelNumber.DisplayLabel: ='Количество' ;
Здесь для статического поля Number возможны два способа обращения: по имени поля в наборе данных и по имени объекта Field поля.
Для определения порядкового номера поля в наборе данных можно использовать свойство FieidNo типа Integer, например, так:
var x: integer;