Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

Документация
Функция htSortResults

htSortResults - Сортировка результатов поиска

Назначение

Обычно найденные записи расположены в порядке возрастания физических номеров. Функция предназначена для сортировки найденных в результате поиска записей в соответствии с порядком значений заданных полей.

Записи сортируются в порядке убывания или возрастания значений поля, номер которого расположен в массиве полей первым. Для одинаковых значений первого поля записи сортируются по значениям поля, номер которого расположен в массиве вторым и т.п.

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

Суммарная длина полей для сортировки не должна превышать MAX_SORT_LEN байтов.

Число полей упорядочивания не должно превышать значения MAX_SORT_ORDER.

Результаты сортировки не могут использоваться в качестве операндов других функций (кроме доступа к результатам).

Функция может быть применена для сортировки списка значений элемента (RES_VALUE). При этом третий и четвертый параметр следует установить в 0. Сортировка списка значений может применяться для окончательного оформления сформированного пользователем при помощи функций работы с результатами (htIncludeResultsItem/htReplaceResultsItem ). Функция позволит упорядочить значения элемента и удалить дубликаты.

Прототип:

int HTAPI htSortResults(
  LPSAB 	fpDst,		/* Для приема результата */
  LPSAB		fpSrc, 		/* Адрес исходного БДС */
  int far	*mOrder, 	/* Номера полей упорядочивания */
  int		nOrderCnt 	/* Число полей упорядочивания */
);

Параметры

fpDst задает адрес БДС, предназначенного для хранения результатов сортировки
fpSrc задает адрес БДС, содержащего результаты поиска. Результат поиска должен содержать записи или являться слиянием группы таблиц (RES_RECORD, RES_JOIN или RES_SORTJOIN).
mOrder задает адрес массива целых чисел, задающих номера полей, по значениям которых выполняется сортировка записей. Положительное число задает сортировку по возрастанию значений поля с этим номером. Отрицательное - по убыванию.
nOrderCnt определяет число полей упорядочивания.

Результат

0 успех
отрицательное число код ошибки

Пример.

Отсортировать список сотрудников по фамилии, начиная с младших.

typedef struct tagSTAFF { /* Структура записи таблицы работников */
	char		name[15];
	unsigned	year_of_birth;
 } STAFF;
int 	mFld[] = { 1, -2 }; /* Фамилия по возрастанию, год рожд. по убыван.*/
int 	rc;
SAB 	sAll;
SAB 	sSort;
THANDLE hTable;
 . . .
/* Все записи таблицы */
htSearch( NULL, &sAll, hTable, 0, GREAT, "\0\0\0", NULL );
 . . .
/* Сортировка по фамилиям и годам рождения */
if( (rc=htSortResults( &ssort, &sAll, mFld, sizeof(mFld)/sizeof(int) )) < 0 )
	/* Обработка ошибок */
 . . .