Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htDistinctResults - Уникализовать результаты поиска

Назначение

Функция предназначена для работы с результатами, содержащими записи или слияние таблиц (RES_RECORD и RES_JOIN/RES_SORTJOIN). Функция позволяет выполнить уникализацию результата по заданному критерию. Повторяющиеся элементы результата (записи или композитные записи) в выходной БДС не попадают. В качестве критериев уникализации могут быть заданы некоторые поля записи (или композитной записи) или вся запись целиком. Сформированный результат операции будет оформлен как БДС, подобный исходному, но содержащий уникальные (с точки зрения заданного критерия) элементы.

Функция "процеживает" заданные вторым операндом результаты поиска (записи или композитные записи), перенося в выходной БДС те из них, которые уникальны по заданной совокупности полей.

Прототип

int HTAPI htDistinctResults(
  LPSAB		fpDst,		/* Для приема уникализованных результатов */
  LPSAB		fpSrc,		/* Неуникализованные результаты поиска */
  int far	*fpnFields,	/* Список полей - критериев уникализации */
				/* NULL - по всей записи в совокупности */
  int		nFieldCnt	/* Число полей-критериев */
);

Параметры

fpDst задает адрес БДС, предназначенного для приема уникализованного результата.
fpSrc задает адрес БДС, содержащего результаты поиска (записи или слияние таблиц). Доступ к результатам должен быть закрыт
fpnFields задает адрес массива целых, содержащих номера полей, выбранных в качестве критериев уникализации. Нумерация полей начинается с 1. Каждое поле может содержаться в массиве только один раз. Если адрес массива не задан (NULL), уникализация будет выполняться по всей записи в совокупности.
nFieldCnt имеет смысл при заданном третьем параметре и определяет размерность массива, содержащего номера полей

Результат

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

Пример.

Найти все записи отдела кадров. Составить их подмножество, содержащее единственное упоминание по каждому сотруднику.

typedef struct tagSTAFF { /* Структура записи таблицы работников */
	int 		depart;
	char 		name[15];		/* Имя */
	char 		surname[25];	/* Фамилия */
	char 		address[50];
	unsigned	fee;
} STAFF;
int 		rc;
int 		anFIO[] = { 2, 3 };
long 		zero;
SAB 		sAll;
SAB 		sOne;
THANDLE 	hTable;
 . . .
/* Все записи таблицы */
zero = 0L;
htSearch( NULL, &sAll, hTable, 0, GREAT, &zero, NULL );
 . . .
/* Уникализовать по совокупности Фамилия-Имя */
if( (rc=htDistinctResults( &sOne, &sAll, anFIO, sizeof(anFIO)/sizeof(int) )) < 0 )
	 /* Обработка ошибок */
 . . .
htClearResults( &sAll );