Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

Документация
Функция htFilterRecords - Фильтрация списка записей

htFilterRecords - Фильтрация списка записей

Назначение:

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

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

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

Прототип:

LPSAB HTAPI htFilterRecords(
	LPSAB   	fpDst,     	/* Для приема результата */
	LPSAB   	fpSrc,     	/* Адрес БДС, содержащего список записей таблицы */
	int far 	*fpFieldNo,	/* Номера полей, подлежащих выборке из записи */
	int     	nFieldCnt, 	/* Число выбираемых полей */
	LPSFUNC 	fpfFilter  	/* Адрес пользовательской функции фильтрации */
	void far	*fpUser    	/* Пользовательский параметр для call-back */
 );

Параметры

fpDst
определяет адрес БДС, предназначенного для хранения найденного в результате фильтрации подмножества записей
fpSrc
задает адрес БДС, содержащего множество записей, найденных в результате какого-либо поиска.
fpFieldNo
задает номера полей, которые нужно "вырезать" из записи для того, чтобы принять решение о пригодности записи. Нумерация полей идет с 1. Поле с номером 0 - физический номер записи - отбору не подлежит. Он будет получен call-back функцией в качестве первого параметра. Если поля отбора не заданы (NULL) - отбирается вся запись целиком
nFieldCnt
задает число отбираемых полей записи или 0, если поля отбора не заданы
fpfFilter
должен содержать адрес пользовательской функции фильтрации. Если он не задан, произойдет простое копирование результатов. Функция должна иметь тип SFUNC
fpUser
можно использовать для передачи дополнительных параметров в пользовательскую функцию фильтрации.

Результат:

адрес БДС, заданный в качестве первого параметра В случае успешного завершения
NULL ошибка, Код ошибки будет занесен в поле fpDst->nRetCode

Пример.

Выбрать все записи с нечетными номерами отделов.

 #define TRUE 1
 #define FALSE 0
 typedef struct tagREC { /* Структура записи таблицы */
     char name[10];
     char sex;
     int depart;
 } REC;
 int nFld = 3;
 long gZero = 0L;
 SAB sAll;
 SAB sOdd;
 THANDLE hTable;
 . . .
 SFUNC Filter /* Сразу получаем значение поля depart */
 {
 if( *(int*)fpField % 2 )
	 return TRUE;
 return FALSE;
 }
 . . .
 if( !htSearch( NULL, &sAll, hTable, 0, GREAT, &gZero, NULL ) )
 /* Обработка ошибок */
 . . .
 if( !htFilterRecords( &sOdd, &sAll, &nFld, 1, Filter, NULL ) )
 /* Обработка ошибок */