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

Previous  Top  Next

    
 

 

 

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

 

Потомки компонента TField (такие как, например, TStringField, TIntegerField и др.) создаются методом Create для того типа потомка TField, который подходит к соответствующему полю набора данных. Другими словами, для поля строкового типа текущего набора данных необходимо вызвать метод Create класса TStringField, являющегося потомком 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 будет вторым TField в свойстве-массиве Fields компонента Query1. Имейте в виду, что набор данных, связанный с новым потомком TField (в нашем случае Query1), перед добавлением TField должен быть закрыт, а после добавления вновь открыт.

Code:

procedure TForm1.Button2Click(Sender: TOObject);

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.

 

Code:

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 и активный в настоящий момент, перед вызовом данного метода должен быть закрыт и впоследствии вновь активирован.

 

©Drkb::02561

       

Взято с http://delphiworld.narod.ru