Шаг 10 - Класс TFieldDef.

Этот класс описывает поле, его тип и т.п. Думаю, лучше каждое свойство рассмотреть.

Attributes

Это свойство содержит аттрибуты данного поля. Это множество, состоящее из значений faHiddenCol, faReadonly, faRequired, faLink, faUnNamed, faFixed. Вот что они значат:

ChildDefs

Это свойство и с ним связанные относятся не ко всем разновидностям (потомкам) класса TFieldDef, а только к производным TObjectField, например TADTField.

Определяет вложенные определения полей - дочерние поля. Это указатель на объект класса TFiledDefs. Для добавления вложеннных полей используется метод AddChild(void), возвращающий указатель на объект TFieldDef. Свойство ParentDef содержит указатель на родительское поле. Взаимосвязь - fDef = fDef->AddChild()->ParentDef. Метод HasChildDefs(void) возвращает, есть ли у данного поля вложенные.

DataType

Это свойство определяет реальный тип физического поля (того, которое записано в таблице или выдается по SQL запросу). Разные специализированные потомки TFieldDef автоматически проставляют значение этого свойсва. Пользователи, впрямую работающему с TFieldDef, приходится вручную устанавливать его значение.

FieldClass

Определяет метакласс поля, основываясь на значении DataType. Возвращается значение, к которому можно приравнять с помощью оператора __classid, например, fDef->DataType = ftInteger; fDef->FieldClass==__classid(TIntegerField);

InternalCalcField

Есть понятие RequestLive запроса, то есть запроса, который выдает динамически просчитываемые данные. Например, как в часто бывает на практике, есть поле ЦЕНА и поле КОЛИЧЕСТВО. Какое-либо поле типа ИТОГ не должно быть ведено отдельно и вводится отдельно. Это источник ошибок и вообще нерациональный метод ведения базы. Для этого есть запросы, например

SELECT ЦЕНА, КОЛИЧЕСТВО (ЦЕНА*КОЛИЧЕСТВО)
FROM DATA

Вот третье поле-то и будет ИТОГ. InternalCalcField как раз и определяет, является ли поле динамическим или нет. Это read-only property, его значение менять нельзя.

Required, Size

Своство Required определяет, обязательно ли поле должно иметь значение вообще. Свойство Size дает возможность установить или считать размер для поля. Тип поля должен быть следующий: ftString, ftBCD, ftBytes, ftVarBytes, ftBlob, ftMemo или ftGraphic.

Collection

Определяет указатель на содержащий данный объект (this) объект-список, коллекцию, производный абстрактного класса TCollection.

Это наиболее значимые свойства данного класса. Надо отметить, что обычно вместо этого класса используются более специализированные, например TADTFiled, TGraphicField, TStringField. Но основные свойства у них эти.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 21.01.2002