Внешний вид сайта:

Создание и удаление TFields во время выполнения

Компоненты TField (или более точно, потомки компонента TField) могут быть созданы во время проектирования, используя Fields Editor. Fields Editor можно вызвать дважды щелкнув на значке компонента TTable или TQuery. Но потомки TField также могут быть созданы и удалены во время выполнения.

Потомки компонента TField (типа TStringField, TIntegerField и т.п.) создаются, вызывая метод Create для потомка типа TField соответствующего поля в наборе данных. То есть, метод Create для TStringField потомка TField вызывался бы, чтобы создать потомка TField строкового типа в текущем наборе данных.

Методу Create передается один параметр - владельца потомка TField, каковым является форма, которая его содержит (TForm). После создания потомка компонента TField, большинство ключевых свойств должно быть установлено, чтобы связать его с полем в наборе данных. Это:

  • FieldName - имя поля в таблице
  • Name - уникальный идентификатор потомка компонента TField
  • Index - позиция потомка компонента TField в массиве TFields (свойство Fields для TTable или TQuery, с которым TField будет связан.
  • DataSet - TTable или TQuery, с которым TField будет связан.

Отрывок кода ниже демонстрирует создание TStringField. Контейнер TForm называется Form1 (упоминается здесь как переменная Self), активный набор данных - TQuery называется Query1, а поле, для которого создается компонент TStringField - поле таблицы dBase называется CO_NAME.

Этот новый потомок будет вторым TField в массиве свойства Fields для Query1.

Обратите внимание, что набор данных, с которым новый потомок TField будет связан (в нашем случае Query1) должен быть закрыт перед добавлением TField и затем заново открыт.

procedure TForm1.Button2Click(Sender: TObject); 
var 
  T: TStringField; 
begin 
  Query1.Close; 
  T := TStringField.Create(Self); 
  T.FieldName := 'CO_NAME'; 
  T.Name := Query1.Name + T.FieldName; 
  T.Index := Query1.FieldCount; 
  T.DataSet := Query1; 
  Query1.FieldDefs.UpDate; 
  Query1.Open; 
end; 

Этот пример создает новый TStringField по имени Query1CO_NAME.

Для удаления существующего потомка TField просто вызовите метод Free для этого компонента.

В примере ниже используется метод TForm FindComponent, чтобы возвратить указатель на компонент TStringField по имени Query1CO_NAME. Возвращаемое значение для FindComponent будет иметь тип TComponent, если успешно, или nil при неудаче.

Возвращаемое значение может использоваться, чтобы определить, существует ли компонент фактически до вызова метода Free.

procedure TForm1.Button1Click(Sender: TObject); 
var 
  TC: TComponent; 
begin 
  TC := FindComponent('Query1CO_NAME'); 
  if not (TC = nil) then begin 
    Query1.Close; 
    TC.Free; 
    Query1.Open; 
  end; 
end; 

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

Комментарии

Нет комментариев. Ваш будет первым!