Сортировка набора данных

Begin

Доступ к полям

Каждое поле набора данных представляет собой отдельный столбец, объект Field : TField.Свойства:

FieldCount : Integer - количество полей набора данных (количество полей набора данных может отличаться от физического числа полей).

Fields [index: Integer] - поле (столбец) набора данных. К отдельному полю можно обратиться, указав его номер Index в массиве Fields;

номера полей находятся в пределах от нуля до FieldCount-1.

Пример:

procedure TForml .ButtonlClick (Sender: TObject) ;

var n: integer;

for n := 0 to Tablel.FieldCount - 1 do

ListBoxl.Items.Add(Tablel.Fields[n].AsString);

end;

Здесь содержимое каждого поля текущей записи интерпретируется как строковое значение и добавляется к списку ListBox1

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

Поэтому для доступа к полям чаще используют методы FindField и FieldByName.

FindField (const FieldName: String) : TField возвращает для набора данных поле, имя которого указывает параметр FieldName.

В отличие от номера в массиве полей, имя поля более статично и изменяется реже. Если заданное параметром FieldName поле не найдено, то метод FindField возвращает значение Nil.

На практике чаще используется метод FieldByName, который отличается от метода FindField тем, что если заданное поле не найдено, то не генерируется исключительная ситуация.

Свойство Fields и методы FindField и FieldByName используются для доступа к значению поля текущей записи совместно с такими свойствами объекта Field, как

AsString, Aslnteger, AsFloat или AsBoolean,

которые позволяют обращаться к значению поля как к строковому, целочисленному, вещественному или логическому значению, соответственно.

Так, в коде:

Var x: integer; ………………..

Label1.Caption := Table1.FieldByName('FIO').AsString;

x := Table1.FieldByName('Num').AsInteger;

строковое значение поля FIOотображается в надписи Label1, а переменной x присваивается целочисленное значение поля Num.

Если же поле Num содержит значение, которое нельзя интерпретировать как целое число, то генерируется исключительная ситуация.

Непосредственно в поля таблицы изменения не вносят, только через формы ввода.

Например:

Var х: integer; ……………. // Перевод набора данных в режим редактирования

Table1.Edit; // Изменение значений полей

Table1.FieldByName ('FIO').AsString := Edit1.Text;

Table1.FieldByName ('Num').Aslnteger := x;// Сохранение изменений

Table1.Post;

Сортировка заключается в упорядочивании записей по определенному полю или нескольким полям (ускоряет поиск).

Сортировка набора данных Table выполняется автоматически по индексу.

Задать индекс можно при проектировании приложения в пункте Secondary Indexes списка Table properties:

• нажать кнопку Define и

• в открывшемся диалоговом окне Define Secondary Index выделить поле индексации и сохранить имена индексов.

Компонент Table имеет свойства:

IndexName – содержит список созданных индексов,

IndexFieldName – список всех полей, из которых можно создать индекс (если забыли в Database Desktop).

Если необходимо менять индексы при работе приложения, то лучше сделать это программно:

procedureTForm1.RadioGroup1Click(Sender:TObject);

begin

Case RadioGroup1.ItemIndex of

0: Table1.IndexName := 'nameindex1' ;

1: Table1.IndexName := 'nameindex2';

2: Table1.IndexName := 'nameindex3';

end;

end;