Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htTransferToTable - Перенести список значений элемента в другую таблицу

Назначение:

В отличие от записей, которые привязаны к "своим" таблицам, списки значений элемента записи можно рассматривать "свободными" от таблиц.

Иначе говоря, список значений некоторого поля, полученный для какой-либо таблицы, можно использовать при работе с другой таблицей. Важно лишь обеспечить совместимость элементов (длина поля и его тип должны совпадать) для обеих таблиц.

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

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

Прототип:

 LPSAB HTAPI htTransferToTable(
	LPSAB   	fpSrc,  	/* Адрес БДС, содержащего список значений эл-та */
	THANDLE 	hTable, 	/* Обработчик для другой таблицы */
	int     	nElemNo 	/* Номер элемента в другой таблице */
 );

Параметры

fpSrc
определяет адрес БДС, содержащего список значений какого-либо элемента в одной из открытых таблиц
hTable
задает обработчик для таблицы, в которую должен быть перенесен список. Можно задать ту же таблицу, для которой получен исходный список
nElemNo
задает номер элемента, значения которого должен представлять данный список. Нумерация элементов в записи начинается с единицы. Длина элемента и его тип должны совпадать с исходным, иначе функция завершится с ошибкой

Результат:

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

Пример.

Перенести список кабинетов в другую таблицу для дальнейшего поиска больных.

typedef struct tagFLOOR { /* Структура записи таблицы кабинетов */
	int floor;
	int room;
} FLOOR;
typedef struct tagPEOPLE { /* Структура записи таблицы больных */
	char name[15];
	int room;
} PEOPLE;
int second = 2;
SAB sScnd;
SAB sRoom;
SAB sPeople;
THANDLE hFloor;
THANDLE hPeople;
 . . .
/* Список всех кабинетов второго этажа */
if( !htSearch( NULL, &sScnd, hFloor, 1, EQUAL, &second, NULL ) )
	/* Обработка ошибок */
if( !htValuesOfKey( &sRoom, 1, &sScnd ) )
	/* Обработка ошибок */
 . . .
/* Перенести список из таблицы FLOOR в таблицу PEOPLE */
if( !htTransferToTable( &sRoom, hPeople, 2 ) )
	/* Обработка ошибок */
 . . .
/* Найти людей, посещающих кабинеты второго этажа */
if( !htRecordsByKey( &sPeople, &sRoom ) )
	/* Обработка ошибок */
 . . .