Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД.doc
Скачиваний:
88
Добавлен:
04.05.2019
Размер:
4.03 Mб
Скачать

Тема. Сортировка набора данных.

Таблицы Paradox по умолчанию сортируются по ключам (первичный индекс). Сортировка набора данных для компонента Table выполняется автоматически по текущему индексу. При смене индекса автоматически происходит сортировка записей в соответствии с новым индексом. Для сортировки записей по нескольким полям нужно создать индекс, включающий эти поля. То есть, сортировка записей по набору данных Table возможна только по полям, для которых задан индекс.

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

IndexName: Stringопределяет вторичный индекс таблицы. Если значение пусто, то порядок сортировки записей основывается на индексе, используемом по умолчанию. Обычно используется, если сортировка выполняется по одному полю.

Например,

TbTovar.IndexName:=’ind_tovar’;

IndexFieldNames:String – содержит список столбцов, которые используются как индексы таблицы и служат для упорядочения значений в указанных столбцах. Имена полей в списке перечисляются через точку с запятой. Для таблиц Paradox имена указываемых полей должны быть проиндексированы.

Например,

TbTovar.IndexFieldNames:='T_Nazv;T_Cena';

Здесь сортировка выполняется по названию и цене товара, индекс ind_TovarCena.

Свойства IndexName и IndexFieldNames являются взаимоисключающими, то есть определение одного свойства очищает значение другого.

IndexFieldCount: Integer(только для чтения) указывает количество полей, которые образуют текущий индекс. Если индекс построен для одного поля, то значение равно 1.

IndexDefs: TIndexDefs; - содержит информацию об установленных для таблицы индексах.

свойство Count:Integer – указывает количество индексов;

свойство Items:Strings – содержит список индексов;

метод Update выполняет обновление определений индекса в свойстве Items.

Пример. Выполнение сортировки по индексу ind_TovarCena

procedure TForm1.BtnSortClick(Sender: TObject);

var i: integer;

begin

TbTovar.Active:=False; // закрытие набора данных

// доступ в исключительном режиме

TbTovar.Exclusive:=True;

// получение доступных индексов

TbTovar.IndexDefs.Update;

// поиск составного индекса на базе полей T_Nazv и T_Cena

for i:=0 to TbTovar.IndexDefs.Count-1 do

if TbTovar.IndexDefs.Items[i].Fields='T_Nazv;T_Cena' then

// Установка найденного индекса как текущего

TbTovar.IndexName:=TbTovar.IndexDefs.Items[i].Name;

TbTovar.Exclusive:=False;

TbTovar.Active:=True;

end;

С войства индексов доступны для редактирования при выборе индекса в окне Editing Table1.IndexDefs, которое появляется при выборе свойства IndexDefs компонента Table.

Направление сортировки можно задать для поля с помощью значения свойства Options: ixDescending=true – сортировка по убыванию значений, = false –по возрастанию значений.

Например, выполнение сортировки значений полей с использованием компонента RadioGroup.

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

case RadioGroup1.ItemIndex of

0 : if RadioGroup2.ItemIndex=0

then TbTovar.IndexFieldNames:='T_Nazv'

else TbTovar.IndexName:='ind_tovar_des';

1 : if RadioGroup2.ItemIndex=0

then TbTovar.IndexFieldNames:='T_Cena'

else TbTovar.IndexName:='ind_cena_des';

else TbTovar.IndexName:='';

end;