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

Получение информации об индексах ТБД


Компонент TindexDefs содержит информацию обо всех индексах таблицы базы данных, объявленных в ней в текущий момент. У TTable имеется свойство property IndexDefs: TIndexDefs; которое содержит ссылку на объект класса TIndexDefs. Поэтому для каждого компонента TTable всегда можно получить информацию об индексах данной ТБД через свойства и методы TIndexDefs. Рассмотрим эти методы и свойства.

Свойства:

property Count: Integer; -

возвращает число индексов;

property Items[Index: Integer|: TIndexDef; -

коллекция объектов типа TIndexDef, каждый из которых содержит информацию о конкретном индексе. Index должен принадлежать диапазону [0..Count-1].

Экземпляр типа TIndexDef имеет следующие свойства (информацию о методах объекта данного класса можно получить в системе помощи Delphi):

property Name: string; -

возвращает имя индекса;

Пример.

Записать в ListBox1 имена всех индексов ТБД, ассоциированной с Table 1:

ListBoxl.Clear;

Table1.IndexDefs.Update;

FOR i := 0 TO Tablel.IndexDefs.Count - 1 do ListBoxl.Items.Add(Tablel.IndexDefs[i].Name) ;

Перед считыванием значения свойства Name необходимо выполнить метод Tablel IndexDefs.Update (см. ниже) для обновления информации обо всех имеющихся индексах.

Отметим, что для Paradox-таблиц имя первичного индекса не выдается; вместо этого выдается пустая строка, поскольку первичный индекс для Paradox-таблиц не имеет имени (рис. 8.1):

Пустую строку имени первичного индекса можно заменять, например, словом 'Primary':



var i : Integer;

Ima : String;

begin

ListBox1:Clear;

Table1.IndexDefs.Update;

FOR i := 0 TO Table1.IndexDefs.Count - 1 do begin

Ima := Table1.IndexDefs[i].Name;

IF Ima = '' THEN Ima := 'Primary';

ListBoxl.Items.Add(Ima) ;

END; //FOR

end;

property Fields: string, -

возвращает список полей, по которым построен данный индекс Поля в строке разделены точкой с запятой Именно в таком виде строку можно указывать в свойстве IndexFie!dNames (компонент TTable)

property Options: TIndexOptions -

возвращает характеристики индекса в виде множества TIndexOptions = set of (ixPrimary ixUnique, ixDescending, ixNonMaintatned, ixCaselnsensitne). Таким образом, возвращаемое значение может состоять максимум из 6 элементов

Пример

Показать в Edit1 Text список полей индекса, чье имя является текущим в ListBox1 (результат на рис 82)

// обработчик события выбора элемента в ListBoxl:

procedure TForm1.ListBox1Click(Sender: TObject);

var Teklndex : Integer;

begin

Teklndex := ListBox1.Itemlndex; { индекс текущего элемента в ListBoxl}

Edit1.Text := Tablel.IndexDefs[Teklndex].Fields;

Label2.Caption := 'Поля индекса ' + ListBoxl.Items[Teklndex] + ':' ;

end;

Методы

procedure Add(const Name, Fields: string; Options: TIndexOptions);

Метод Add создает новый объект TIndexDef и помещает его в коллекцию TIndexDefs Items На момент создания должны быть определены такие параметры нового объекта TIndexDef, как Name, Fields, Options Их назначение совпадает с назначением аналогичных свойств компонента TindexDef . Этот метод в основном используется при создании новых таблиц

procedure Update;

обновляет элементы коллекции TIndexDefs Items текущей информацией из НД, причем обновление может производиться и без открытия набора данных

procedure Clear;

очищает элементы коллекции TIndexDefs Items

function Index0f(const Name: string): Integer;

возвращает из коллекции TIndexDefs Items индекс элемента, у которого свойство Name совпадает с параметром Name данного метода

function FindIndexForFields(const Fields: string): TIndexDef;

Отыскивает индекс по списку его полей, которые содержатся в строке Fields Возвращает указатель на объект TIndexDefв коллекции TIndexDefs Items, в котором содержимое свойства Fields совпадает с параметром Fields индекса

Метод GetIndexNames

procedure GetIndexNames(List: Tstrings) - возвращает в параметре List список имен индексов Заметим, что для Paradox-таблиц имя главного индекса не выдается

Пример.

Выдать список индексов ТБД, ассоциированной с Table1 (рис.8.3):

ListBox2.Clear;

Tablel.GetIndexNames(ListBox2.Items) ;

Свойства IndexFieldCount и IndexFields

Свойство IndexFieldCount: Integer; - возвращает число полей в текущем индексе НД. Номер первого поля 0.

Свойство IndexFields[Index: Integer]: TField; содержит набор полей текущего индекса; обращение IndexFields [Index] возвращает информацию о поле, определенном в текущем индексе под номером Index (нумерация полей начинается с 0). Для n определенных полей Index лежит в диапазоне 0.. (n-1). Например, чтобы записать в ListBox1 имена всех полей текущего индекса, можно использовать такой фрагмент программы:

var i : Integer;

ListBox1.Clear;

For i:= 0 TO Tablel.IndexFieldCount - 1 do ListBoxl.Items.Add(Tablel.IndexFields[I].FieldName) ;

Поскольку при обращении к Index Fields [Index] возвращается указатель на объект типа TField, для данного поля текущего индекса можно пользоваться всеми свойствами и методами типа TField.



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