Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htXorResults - Исключение результата

Назначение:

Функция выполняет операцию XOR (исключающее ИЛИ) двух результатов поиска. Из результата исключаются элементы, попадающие в оба исходных операнда одновременно.

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

Операнды, являющиеся списками значений ключа, должны содержать совместимые значения (типы ключей и их длины должны совпадать).

Прототип:

 LPSAB HTAPI htXorResults(
	LPSAB fpDst, /* Блок для приема результата */
	LPSAB fpSrc1,	 /* Блок с первым операндом */
	LPSAB fpSrc2	 /* Блок со вторым операндом */
 );

Параметры

fpDst
содержит адрес БДС, предназначенного для приема результата
fpSrc1
задает адрес БДС, содержащего расширяемые результаты
fpSrc2
задает адрес БДС, содержащего условие расширения

Результат:

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

Пример.

Найти поставщиков поставляющих любую одну из двух деталей.

 typedef struct tagREC { /* Структура записи таблицы */
     char dealer[10];
     int part;
 } REC;
 int part1 = 1;
 int part2 = 2;
 SAB sPart1;
 SAB sPart2;
 SAB sTmp;
 THANDLE hTable;
 . . .
 /* Поставки первой детали */
 if( !htSearch( NULL, &sTmp, hTable, 2, EQUAL, &part1, NULL ) )
 /* Обработка ошибок */
 /* Список поставщиков первой детали */
 if( !htValuesOfKey( &sPart1, 1, &sTmp ) )
 /* Обработка ошибок */
 htClearResults( &sTmp );
 . . .
 /* Поставки второй детали */
 if( !htSearch( NULL, &sTmp, hTable, 2, EQUAL, &part2, NULL ) )
 /* Обработка ошибок */
 /* Список поставщиков второй детали */
 if( !htValuesOfKey( &sPart2, 1, &sTmp ) )
 /* Обработка ошибок */
 htClearResults( &sTmp );
 . . .
 /* Список поставщиков любой одной детали */
 if( !htXorResults( &sTmp, &sPart1, &sPart2 ) )
 /* Обработка ошибок */
 else
 /* Таких поставщиков: sTmp.gFoundCnt */