Создание объектов-полей

Поля НД TTable или TQuery выступают как целостная конструкция и не могут рассматриваться и использоваться в программе отдельно.

Объекты-поля НД становятся "заменителем" соответствующих полей НД и выступают как самостоятельные объекты, которые удобно использовать в программе как отдельные обрабатываемые сущности (см. далее).

В частности, механизм создания объектов-полей позволяет расширить исходные НД за счет введения в них полей, которые реально находятся в других таблицах БД или формируются как результат обработки исходных полей.

Чтобы показать в сетках названия партнеров и книг к исходному НД tbNakls необходимо добавить подстановочные (Lookup) поля из других таблиц.

Перейдите к модулю данных DM и нажмите клавишу F12 для визуализации окна модуля данных.

Двойным щелчком на компоненте tbNakls откройте окно редактора полей.

а) незаполненное

Щелкните в окне редактора правой кнопкой мыши и в контекстном меню выберите команду Add all fields - окно редактора заполнится списком всех полей таблицы NAKLS.

б) заполненное

Рисунок 3.25 – Окно редактора полей

Этот список означает, что теперь для каждого поля НД tbNakls создан специальный объект-поле со своими свойствами, методами и событиями.

Если вы щелкнете на любом поле в окне редактора полей, то в окне инспектора объектов станут доступными свойства и события объекта-поля. По умолчанию Delphi присваивает объекту-полю имя, полученное сцеплением имени НД и имени поля, так что теперь в программе окажутся компоненты с именами NaklsNakllD, NaklsNFirm, NaklsNDate и т. д.

Рисунок 3.26 – Окно Object Inspector для поля NaklId, выделенного в редакторе полей

Перечень этих компонентов можно увидеть в окне Object TreeView, а их объявление в классе TDM кода модуля данных.

Рисунок 3.27 – Окно Object TreeView для полей в редакторе полей

Внимание! Следует помнить, что если для НД, например tbNakls:

1. Не созданы объекты-поля, он содержит данные из всех полей соответствующей таблицы NAKLS;

2. Создан хотя бы один объект-поле, соответствующий НД tbNakls будет содержать значения только тех полей, для которых явно созданы объекты-поля.

Поэтому лучше принудительно создавать объекты-поля для всех полей НД. Более того, если необходимо расширить НД за счет добавления к нему подстановочных полей из других таблиц, то без объектов-полей в этом случае просто не обойтись.

Описанным выше образом создайте объекты-поля и для НД tbMove.

Примечание 1. Создание объектов-полей для каждого используемого в программе НД можно считать признаком хорошего стиля программирования, так как они упрощают доступ к данным и дают программисту дополнительные возможности. Так с помощью свойства DisplayLabel можно изменить заголовки соответствующих колонок в сетках отображения данных. С помощью обработчика события OnGetText можно изменить формат отображения данных и т.п.

Примечание 2. Использовать свойство Visible = False объектов-полей для их сокрытия в сетке DBGrid нецелесообразно, так как скрытые объекты-поля не будут видны не только в этой сетке, но и в любом другом визуализирующем компоненте Delphi (эти компоненты сосредоточены на вкладке Data Controls палитры компонентов), что затруднит редактирование и ввод данных для соответствующих НД.