Применение следящих типов данных

Применений может быть много, но наиболее распространенным может считаться механизм один ко многим и схожие с ним механизмы.

В платформе реализована следующая схема.

В таблице А организуется поле, содержание которого должно быть выбрано из поля таблицы В, причем выбирается то значение, на котором стоить указатель записей в таблице В. Работает этот механизм в момент вставки новой записи в таблицу А или же при редактировании записи в таблице А.

Пример такого использования.

Структура поля имеет вид

// Структура поля

TFieldInfo = record

// Атрибуты

sFieldAttr : TStrings;

{ sFieldName - Имя поля }

{ sFieldCaption - Наименование }

{ sFieldDescr - Описание }

{ sMTableName - Имя главной таблицы }

{ sMFieldName - Имя главного поля }

{ sPicDescr - Имя списочного типа }

{ sAgregateExpr - Агрегатное выражение }

 

// Ссылка на структуру таблицы-владельца поля

spTTableInfo : pTTableInfo;

 

// Ссылка на объект связи данных с полем

spTFieldDataObj : pTFieldDataObj;

 

sFieldType : TFieldType;

sFieldSize : Integer;

sFieldMBytes : Integer;

sField : TField;

 

sMTTableInfo : pTTableInfo; // Ссылка на структуру главной таблицы

sMTFieldInfo : pTFieldInfo; // Ссылка на структуру главного поля

sPickList : TStrings; // Список списочного типа

end;

Но есть одна тонкость. Если даже имеются непустые значения атрибутов sMTableName и sMFieldName, это еще не значит, что они реально будут использованы. Их реальное использование зависит от наличия ссылок sMTTableInfo и sMTFieldInfo. А это, в свою очередь, определяет настройщик в конфигураторе установкой флага «автоссылка». Признак установки/снятия флага «автоссылка» записывается в системную базу данных. В момент загрузки приложения поля sMTTableInfo и sMTFieldInfo заполняются только в том случае, когда, помимо наличия атрибутов sMTableName и sMFieldName, будет обнаружен установленный флаг «автоссылка». В противном случае они будут иметь нулевые ссылки. Таким образом, настройщик волен отключить механизм использвания следящих типов и обращаться с этими полями как с базовыми, заставив пользователя вводить значения вручную.

Однако, пусть флаг «автоссылка» установлен.

Тогда в момент ввода новой записи в таблицу А производится просмотр информации в таблице, представленной структурой sMTTableInfo. Если эта таблица открыта, то из текущей записи этой таблицы извлекается значение поля, представленного структурой sMTFieldInfo, и подставляется в соответсвующее место редактора БД. Вот, собственно и все.

Следящий тип можно использовать и для связок master-detail, но в платформе пока это не было использовано, т.к. еще не возник прецедент создания такой функции.

При публикации платформы будут более основательные объяснения.