Delphi 3 и создание приложений баз данных

         

Использование компонента TFieldDefs


Компонент TFieldDefs содержит информацию о полях, объявленных в составе ТБД, ассоциированной с данным НД.

Для НД типа TTable компонент TFieldDefs содержит информацию обо всех полях, объявленных в структуре ТБД, ассоциированной с данным TTable. He следует путать это свойство с свойством Fields, которое содержит информацию о всех компонентах типа TField, объявленных для данного набора данных с использованием редактора полей.

Для НД типа TQuery компонент TFieldDefs содержит информацию обо всех полях, объявленных в качестве возвращаемых полей в операторе SELECT. Подробнее см. замечание, помещенное в конце данного подраздела. Свойство набора данных

property FieldDefs: TFieldDefs;

в качестве результата возвращает указатель на объект типа TFieldDefs данного НД и, таким образом, с его помощью можно использовать свойства и методы

компонента TFieldDefs для определения числа и характеристик полей, объявленных в таблице базы данных, ассоциированной с данным НД. Рассмотрим свойства и методы компонента TFieldDefs.

Свойства компонента TFieldDefs

• property Count: Integer;

Возвращает количество компонентов типа TIndexDef, каждый из которых содержит информацию о конкретном поле в составе ТБД.

• property Items[Index: Integer]: TFieldDef;

Данное свойство является набором объектов типа TFieldDef, каждый из которых содержит информацию о конкретном поле, объявленном в составе ТБД. Доступ к конкретному объекту осуществляется через указание Items[Index], где Index лежит в диапазоне Q..Count-\.

Объект типа TFiezldDef обладает следующими свойствами:

• property DataType: TFieldType;

Свойство DataType возвращает тип поля как значение из перечислимого типа TFieldType:

TFieldType = (ftString, ftSmallint, ftlnteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary);

• property FieldNo: Integer;

Свойство FieldNo возвращает физический номер поля, использующийся Borland Database Engine (BDE) для доступа к полю.

• property Name: string;

Свойство Name возвращает физическое имя поля в ТБД.

• property Required: Boolean;

Данное свойство возвращает True, если поле требует обязательного заполнения каким-либо значением, и False в противном случае.

• property Size: Integer;

Данное свойство возвращает размер поля. Он важен для полей типов: ftString, ftBCD, ftBytes, ftVarBytes, ftBlob, ftMemo or ftGraphic. Для полей всех остальных типов размер поля определяется его типом. Для полей BCD возвращается число знаков после десятичной точки.

Пример.

Считать сведения о полях ТБД, ассоциированной с Table 1, и поместить в ListBox1 информацию об имени каждого поля, его типе, размере и значении его свойства Required (результат работы приводимого кода на рис.7.38):

var i : Integer;

TipPolja : String; // тип поля

Tmp : String; // результат форматирования

TmpReq : String[3];//рабочая переменная

begin

ListBoxl.Clear;

Tablel.FieldDefs.Update;

// считываем поля и заносим в ListBoxl сведения об

//их имени, типе, размере и свойстве Required

FOR i := О ТО Tablel.FieldDefs.Count - 1 do begin

CASE Tablel.FieldDefs.Items[i].DataType OF

ftString TipPolja = 'String';

ftSmallint TipPolja = 'Smallint' ;

ftlnteger TipPolja == 'Integer';

ftWord TipPolja = 'Word';

ftBoolean TipPolja = 'Boolean';

ftFloat TipPolja = 'Float';

ftCurrency TipPolja = 'Currency' ;

ftBCD TipPol;a = 'BCD';

ftDate TipPolja = 'Date';

ftTime TipPolja = 'Time';

ftDateTime TipPolja = 'DateTime';

ftBytes TipPolja = 'Bytes' ;

ftVarBytes TipPolja = 'VarBytes' ;

ftAutoInc TipPolja = 'AutoInc';

ftBlob TipPolja = 'Blob';

ftMemo TipPolja = 'Memo';

ftGraphic TipPolja = 'Graphic';

ftFmtMemo TipPolja = 'FmtMemo' ;

ftParadoxOle TipPolja = 'ParadoxOle';

ftDBaseOle TipPolja = 'DBaseOle';

ftTypedBinary TipPolja = 'TypedBinary';

END;

IF Tablel.FieldDefs.Items[i].Required THEN

TmpReq := 'Req'

ELSE

TmpReq := ' - ';

Tmp := Format('%-16s %-10s %-5s %4d', [Tablel.FieldDefs.Items[i].Name, TipPol]a, TmpReq, Tablel.FieldDefs.Items[i].Size]) ;

ListBoxl.Items.Add(Tmp);

END;

Методы компонента TFieldDefs

procedure Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean);

Метод Add добавляет в список Items новый элемент- поле.

Параметр Name определяет имя нового поля.

Параметр DataType определяет тип поля как одно из значений перечислимого типа TFieldType (см. выше описание свойства TTable. TFieldDefs.Items [Index].DataType).

Параметр Si:e указывает размер поля или 0 в случае, когда размер поля явно определяется его типом (например, ftlnteger определяет целочисленное поле длиной в слово).

Параметр Required определяет, должно ли поле в обязательном порядке содержать какое-либо значение, или не должно.

procedure Clear;

Метод Clear очищает FieldDefs. Это необходимо, например, при создании новой ТБД (см. метод TTable. CreateTable.

function Find(const Name: string): TFieldDef;

Метод Find ищет поле по его имени, определяемому параметром Name. В случае успеха метод возвращает указатель на объект TIndexDefs. Items.

function Index0f(const Name: string): Integer; Метод Index Of ищет поле по его имени и возвращает индекс объекта TIndexDefs списке Items. У найденного элемента значение свойства Name совпадает с параметром Name метода.

procedure Update;

Метод Update обновляет содержимое свойства TFieldDef текущей информацией о полях в составе ТБД. Он также позволяет заносить в TFieldDef информацию о полях неоткрытого НД.

ЗАМЕЧАНИЕ.

Для НД типа TQuery в свойстве FieldDefs будет содержаться информация только о тех полях, которые представлены в списке после оператора SELECT:

SELECT P.NN, P.DatePrih, P.Tovar

FROM prihod P

WHERE ...

Тогда свойство FieldDefs будет содержать информацию только о полях NN, DatePrih, Tovar таблицы Prihod.

Это правило действует и для случая двух и более таблиц БД, участвующих в запросе:

SELECT P.NN, P.DatePrih, P.Tovar, P.Kolvo, K.KursUSD

FROM prihod P, KursUSD К

WHERE K.Datel= P.DatePrih

В случае использования в качестве полей результирующего запроса агрегированных функций типа SUM, а также результатов выражений, имя вычисляемого или агрегированного поля берется по его псевдониму, следующему после ключевого слова as:

SELECT P.NN, P.DatePrih, P.Tovar, P.Kolvo, K.KursUSD, P.KolVo * K.KursUSD as Zena

FROM prihod P, KursUSD К

WHERE K.Datel= P.DatePrih

В данном случае вычисляемое поле P.KolVo * K.KursUSD имеет в результирующем НД имя ' Zena '.

Если псеводним вычисляемому или агрегированному полю не присвоен, его имя берется как копия арифметического выражения, по которому значение этого поля вычисляется. Например:

SELECT P.NN, P.DatePrih, P.Tovar, P.Kolvo, K.KursUSD,

P.KolVo * K.KursUSD

FROM prihod P, KursUSD К

WHERE K.Datel= P.DatePrih

Имя вычисляемого по выражению P.Kolvo * K.KursUSD поля будет P.KolVo * K.KursUSD '.



Содержание раздела