Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htOpenResults - Открыть доступ к результатам поиска

Назначение

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

Прототип

int HTAPI htOpenResults(
  LPSAB		fpSrc,		/* Адрес исходного БДС в результатами поиска */
  int		nMode,		/* Режим открытия (комбинация констант ROPEN_??) */
  int far	*fpElemNo,	/* Номера читаемых элементов записи */
  int		nElemCnt	/* Число выводимых элементов */
 );

Параметры

fpSrc определяет адрес БДС, содержащего закрытые результаты поиска
nMode задает режим открытия результатов и может содержать комбинацию флагов ROPEN_MODE
fpElemNo адрес массива целых, являющихся номерами полей. Если NULL, то производится чтение всех полей
nElemCnt число полей в массиве, указанном параметром fpElemNo, или 0, если массив не указан

Параметр fpElemNo

Параметр fpElemNo имеет смысл для результатов, содержащих записи или связку таблиц (RES_RECORD, RES_SORT, RES_JOIN, RES_SORTJOIN). Он задает адрес массива целых, являющихся номерами полей результирующих записей, подлежащих чтению. При операциях чтения будут читаться лишь те поля записей-результатов, номера которых были перечислены при открытии. Нумерация полей идет с единицы. Номер 0 отведен для доступа к физическому номеру записи. Номера полей могут быть заданы в произвольном порядке. Повтор номеров полей не допускается.

Для связки таблиц предполагается сквозная нумерация всех полей "композитной" записи, включая физический номер для каждой составляющей записи. Если параметр fpElemNo не задан (NULL), выполняется чтение всех полей записи. Чтение физических номеров в этом случае регулируется флагом ROPEN_BODY, задаваемым во втором параметре функции.

Для результатов поиска, отличных от записей (списки значений, гистограммы, группы), второй параметр должен быть задан как ROPEN_READ, третий NULL, четвертый 0.

Результат

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

Пример 1

Открыть доступ к гистограмме значений ключа.

int	rc;
SAB	sHisto;
SAB	sSet;
THANDLE	hTable;
 . . .
htHistogramOfKey( &sHisto, 1, htSearch( NULL, &sSet,
		 hTable, 0, GREAT, "\0\0\0", NULL ) );
 . . .
if( (rc=htOpenResults( &sHisto, ROPEN_READ, NULL, 0 )) < 0 )
	/* Обработка ошибок */
 . . .
htCloseResults( &sHisto );

Пример 2.

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

int	rc;
int	mFld[] = { 3, 1, 0 };
SAB	sSet;
THANDLE hTable;
 . . .
htSearch( NULL, &sSet, hTable, 0, GREAT, "\0\0\0", NULL );
 . . .
if( (rc=htOpenResults( &sSet, ROPEN_READ, mFld, sizeof(mFld)/sizeof(int) )) < 0 )
	/* Обработка ошибок */
 . . .
htCloseResults( &sSet );

Пример 3.

Открыть доступ к найденным записям для чтения полной записи (физ.номер не нужен)

int 	rc;
SAB 	sSet;
THANDLE hTable;
 . . .
htSearch( NULL, &sSet, hTable, 0, GREAT, "\0\0\0", NULL );
 . . .
if( (rc=htOpenResults( &sSet, ROPEN_READ | ROPEN_BODY, NULL, 0 )) < 0 )
	/* Обработка ошибок */
 . . .
htCloseResults( &sSet );

Пример 4.

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

typedef struct tagREPUBLIC { 	* Структура записи таблицы республик */
	char	code;		/* Поле-связка */
	char	name[30];
} REPUBLIC;
typedef struct tagCLIENT { /* Структура записи таблицы больных */
	char 	name[15];
	char 	address[50];
	char 	sex;
	char 	code; 		/* Поле-связка */
} CLIENT;
int	mFld[] = { 2, 6 }; /* Каждая таблица имеет физ.номер */
			 /* поэтому третье поле второй таблицы #6 */
SAB	sCode;
SAB	sMen;
SAB	sTmp;
THANDLE hClient;
THANDLE hRepub;
 . . .
 /* Код республики по названию */
if( !htSearch( NULL, &sCode, hRepub, 2, EQUAL, "КАЗАХСТАН", NULL ) )
	/* Обработка ошибок */
 . . .
/* Мужчины-больные */
if( !htSearch( NULL, &sMen, hClient, 3, EQUAL, "M", NULL ) )
	/* Обработка ошибок */
 . . .
/* Больные мужчины из Казахстана */
if( !htTablesJoin( &sTmp, &sCode, 1, EQUAL, &sMen, 4, NULL, 0 ) )
	/* Обработка ошибок */
 . . .
/* Открыть доступ к результатам */
if( (rc=htOpenResults( &sTmp, ROPEN_READ, mFld, sizeof(mFld)/sizeof(int) )) < 0 )
	/* Обработка ошибок */