Операции с полями

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;