Russian Belarusian English German Japanese Ukrainian

Редактор полей

CuBook25

По умолчанию для каждого физического поля при открытии набора данных автоматически создается объект типа TField, а все поля в наборе данных являются динамическими и доступными. Для создания статических (устойчивых) полей используется специальный Редактор полей. Если хотя бы одно поле набора данных является статическим, динамические поля больше создаваться не будут. Таким образом, в наборе данных будут доступны только статические поля, а все остальные считаются отсутствующими. Определить или отменить состав статических полей можно с помощью Редактора полей на этапе разработки приложения.
Для компонента Query состав полей определяется также в тексте SQL-запроса, с помощью которого можно задать или изменить состав полей набора данных, несмотря на то, что эти поля являются динамическими.
Во время выполнения приложения можно определить вид полей набора данных с помощью свойства DefaultFields типа bool. Если его значение равно true, то набор данных по умолчанию имеет динамические поля, в противном случае для набора данных заданы статические поля. Для запуска редактора полей следует сделать двойной щелчок на компоненте Table или Query или, вызвав для одного из них контекстное меню правой кнопкой мыши, выбрать пункт Fields Editor. В заголовке редактора полей выводится составное имя набора данных, например, Form1->Query1. Для перемещения по полям используются четыре кнопки навигации редактора или мышь. Большую часть редактора занимает список статических полей, при этом поля перечисляются в порядке их создания, который может отличаться от порядка полей в таблице БД.
 
Первоначально список статических полей пуст, указывая, что все поля набора данных являются динамическими. С помощью редактора полей можно выполнить следующие операции:
  • создать новое статическое поле;
  • удалить статическое поле;
  • изменить порядок следования статических полей.
Кроме того, для любого выбранного в редакторе статического поля с помощью инспектора объектов можно задать или изменить свойства этого поля (объекта типа TField) и определить обработчики его событий. Подобные действия разрешается производить благодаря тому, что соответствующие статическим полям объекты типа TField доступны на этапе разработки приложения.
 
Для создания статического поля следует вызвать контекстное меню редактора полей и выбрать пункт Add Fields (Добавить поля), в результате чего появляется диалоговое окно добавления новых полей. В списке Available fields (Доступные поля) окна содержатся все те поля набора данных, которые еще не являются статическими. После выбора одного или нескольких полей и нажатия кнопки OK эти поля добавляются в состав статических полей набора данных. Добавленное статическое поле является полем данных и связано с конкретным физическим полем таблицы БД.
 
Для добавления в список всех физических полей таблицы (для набора данных Table) или результата выполнения SQL-запроса (для набора данных Query) нужно выбрать в контекстном меню редактора полей пункт Add all Fields (Добавить все поля). При каждом открытии (в том числе при разработке приложения) набора данных проверяется возможность создания экземпляров класса TField для статических полей. Если поле вследствие какой-нибудь ошибки является недопустимым, и создание объекта типа TField невозможно, то генерируется исключение, а набор данных закрывается.
 
Для удаления статического поля нужно выделить его в списке и задать команду Delete контекстного меню или нажать клавишу <Delete>. После удаления статического поля оно становится недоступным для операций в программе, но при необходимости его снова можно сделать статическим, добавив в список редактора полей. Все свойства этого поля устанавливаются заново, а сделанные ранее изменения теряются.
Если удалены все статические поля, то все поля набора данных становятся динамическими и доступными при выполнении приложения.
Порядок следования полей определяется их местом в списке редактора полей. По умолчанию порядок полей соответствует порядку физических полей в таблицах БД. Его можно изменить, перемещая поля в списке с помощью мыши или комбинаций клавиш <Ctrl>+<T> и <Ctrl>+<i>.
Если для набора данных определены статические поля, то изменение значения свойства TableName этого набора данных может привести к ошибке, что обычно и происходит. Это связано с тем, что в новой таблице, связываемой с набором данных, могут отсутствовать физические поля, для которых были созданы статические поля. В таких случаях программист должен предусматривать соответствующие операции, например, формирование нового состава статических полей.
Есть три типа статических полей:
  • поле данных, связанное с соответствующим физическим полем таблицы;
  • вычисляемое поле, значение которого рассчитывается в обработчике события onCaicFieids во время выполнения приложения;
  • поле выбора, значение которого можно выбирать из списка, формируемого на основе заданных критериев и правил.
Для создания нового статического поля любого типа нужно выбрать в контекстном меню редактора полей пункт New Field, в результате чего открывается одноименное диалоговое окно.
 
Для задания общих свойств (параметров) нового поля используется группа элементов управления Field properties (Свойства поля). В поле ввода Name задается значение свойства FieldName (имя поля), а в поле ввода Component значение свойства Name (имя компонента поля объекта типа TField). При программировании обычно используется имя поля. С++ Builder автоматически формирует значение в поле ввода Component, и попытка изменить его не приводит к желаемому результату. В списке Туре и поле ввода Size указываются тип данных и размер поля. Тип данных обязательно задается для всех полей, а необходимость задания размера зависит от типа данных. Например, для поля с типом данных integer задание размера не имеет смысла, а для типа string размер поля ограничивает максимальную длину строки.
 
Тип нового поля выбирается в группе переключателей Field type из следующих вариантов:
  • Data (поле данных);
  • Calculated (вычисляемое поле);
  • Lookup (поле выбора).  
В группе Lookup definition (Определение выбора) для поля выбора устанавливаются такие параметры, как набор данных и поля связи, а также поля для формирования списка выбора и результата. После создания нового статического поля его свойства становятся доступными с помощью инспектора объектов и могут быть изменены. При этом каждому параметру, задаваемому с помощью поля ввода или переключателя окна New Field, соответствует определенное свойство объекта типа TField. Все свойства объекта доступны с помощью инспектора объектов, за исключением свойства FieldName, которое доступно только во время выполнения приложения, однако при разработке приложения значение этого свойства видно в окне редактора полей и инспектора объектов. Значение параметра туре определяет класс объекта Field, который будет соответствовать статическому полю, например, для типа string это TStringField, а для типа Float это TFloatField.
Свойство объекта поля Элемент управления
FieldName Поле ввода Name
Name Поле ввода Comdivonent
size (для строковых и числовых полей) Поле ввода Size
divrecision (для полей с плавающей точкой)  
FieldKind Группа переключателей Field tydive
KeyFields Комбинированный список Key Fields
LookudivKeyFields Комбинированный список Lookudiv Keys
LookudivDataset Комбинированный список Dataset
LookudivResultField Комбинированный список Result Field
Свойство FieldKind типа TFieldKind определяет тип поля и принимает следующие значения:
  • fkData (физическое поле в базе данных);
  • fkCalculated (вычисляемое поле);
  • fkLookup (поле выбора);
  • fkInternalCalc (вычисляемое поле, которое сохраняется в наборе данных);
  • fkAggregate (поле, содержащее агрегированный результат).
Статическое поле данных создается для соответствующего физического поля таблицы рассмотренным выше способом, в то время как создание вычисляемого поля или поля выбора является более сложной задачей.
 
Для создания статического вычисляемого поля нужно выполнить следующие действия:
  1. В окне создания статического поля задать имя и тип поля, а также выбрать переключатель Calculated.
  2. Для набора данных, содержащего поле, подготовить код обработчика события OnCalcFields типа TDataSetNotifyEvent, в котором этому полю присваивается требуемое значение, при этом для расчета значения вычисляемого поля можно использовать значения других полей, а также переменные и константы программы.
После создания вычисляемого поля его свойство FieldKind автоматически получает значение fkCalculated. Кроме того, также автоматически свойству Calculated типа bool устанавливается значение true, указывающее на то, что это поле является вычисляемым. Для полей другого типа свойство Calculated имеет значение false. Событие OnCalcFields предназначено для определения значений всех вычисляемых полей набора данных. Оно генерируется каждый раз при считывании записи из таблицы, а также при изменении значений не вычисляемых полей, если свойству AutoCalcFields типа bool установлено значение true (по умолчанию). На время выполнения обработчика события OnCalcFields набор данных переводится в режим dsCaicFieids расчета вычисляемых полей, а затем возвращается в предыдущий режим.
В обработчике события OnCalcFields можно присваивать значения вычисляемым полям, а также полям выбора (в том числе не входящим в состав списка выбора). Попытка изменить значение поля данных (физического поля таблицы) вызывает исключение.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий