Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htSeekResults - Перемещение логического указателя по результатам поиска

Назначение

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

При перемещении за границы результата позиция "возвращается" в заданные рамки. Например, если найдены записи с 10 по 20, то при позиционировании на запись с номером 2 - установимся на запись 10, а для записи 23 - на запись 20 и т.п.

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

Прототип:

long HTAPI htSeekResults(
  LPSAB		fpSrc,		/* Адрес исходного БДС */
  long		gOffset, 	/* Величина перемещения */
  RSEEK_MODE	nFromWhere 	/* Режим перемещения */
);

Параметры

fpSrc определяет адрес БДС, содержащего открытые результаты поиска.
gOffset задает величину перемещения указателя. Единицей перемещения является элемент результата (запись, значение ключа, элемент группы и т.п.). Допустимы как отрицательные (перемещение в направлении начала результатов), так и положительные значения (перемещение в направлении конца). Отсчет значений идет с 0.
nFromWhere определяет режим перемещения (исходную точку) и может принимать значения RSEEK_MODE

Результат

положительное число текущая позиция логического указателя.
отрицательное число код ошибки

Физический смысл возвращаемого значения отличается для разных типов результатов:

- для всех результатов, кроме записей, это порядковый номер текущего элемента результата (отсчет от 0);

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

Пример 1.

Определить номер первой записи результата.

int 	rc;
long 	num;
SAB 	sSet;
THANDLE	hTable;
 . . .
htSearch( NULL, &sSet, hTable, 0, GREAT, "\0\0\0", NULL );
 . . .
if( (rc=htOpenResults( &sSet, ROPEN_READ, NULL, 0 )) < 0 )
	/* Обработка ошибок */
 . . .
if( (num=htSeekResults( &sSet, 0L, RSEEK_SET )) < 0L )
	 /* Обработка ошибок */
else /* Первая запись имеет # num */
 . . .

Пример 2.

Установиться на третий элемент гистограммы. Проверка кодов завершения опущена.

SAB 	sHisto;
SAB 	sSet;
THANDLE hTable;
 . . .
htHistogramOfKey( &sHisto, 1, htSearch( NULL, &sSet,
		 hTable, 0, GREAT, "\0\0\0", NULL ) );
 . . .
htOpenResults( &sHisto, ROPEN_READ, NULL, 0 );
 . . .
htSeekResults( &sHisto, 2L, RSEEK_SET );
 . . .