Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htIncludeResultsItem - Добавить элемент в результаты поиска

Назначение:

Функция предназначения для работы с результатами любого типа. Позволяет добавить в заданное место результатов новый элемент без выполнения поиска. Число элементов в результате увеличивается. Доступ к исходным результатам должен быть открыт.

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

Для записей (RES_RECORD) добавляемая запись должна существовать в рамках снимка, для которого был получен результат. При необходимости добавить к результату новую (относительно снимка) запись, следует предварительно выполнить htTouchResults. Более правильным решением будет выполнение нового поиска. Кроме прочего, это позволить увидеть изменения, произведенные другими пользователями сети.

Элемент для слияния таблиц (RES_JOIN/RES_SORTJOIN) может содержать как обработчики добавленных/измененных записей (htHandleAdd/htHandleModify), так и обработчики имеющихся записей. Эти обработчики могут быть получены при чтении результатов других поисков или через функции htHandleFromRecNo, htRecordByUniq. Кроме того, допустимо использование "пустого" обработчика - 0L. При последующем чтении полей записи таблиц для элемента, содержащего пустые обработчики, будут сформированы нулевые значения (пробелы для символьных и 0 для цифровых полей).

Прототип:

int HTAPI htIncludeResultsItem(
  LPSAB 	fpSrc,		/* Адрес исходного БДС */
  long 		gItemNo, 	/* Позиция вставки элемента (отсчет от 0) */
  void far	*fpNewItem 	/* Новый элемент результата: */
);

Параметры

fpSrc
определяет адрес БДС, содержащего открытые результаты поиска
gItemNo
задает место вставки нового элемента (отсчет от 0) для всех типов результата, кроме записей. Для записей этот параметр задает физический номер записи, добавляемой в результаты поиска. Запись добавляется только в результат, не в таблицу
fpNewItem
задает адрес области памяти, содержащей значение добавляемого элемента. Для записей (RES_RECORD) следует задать NULL

Результат

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

Пример.

Построить "обобщенную" таблицу для больных мужчин из Казахстана. Добавить новый элемент в связку и таблицу больных. Проверка кодов опущена для простоты.

typedef struct tagREPUBLIC { /* Структура записи таблицы республик */
	char code; /* Поле-связка */
	char name[30];
} REPUBLIC;
typedef struct tagCLIENT { /* Структура записи таблицы больных */
	char name[15];
	char address[50];
	char sex;
	char code; /* Поле-связка */
} CLIENT;
SAB sCode;
SAB sMen;
SAB sTmp;
CLIENT sCli = { "НАЗАРБАЕВ", "АЛМА-АТА", 'M', ' ' };
THANDLE hClient;
THANDLE hRepub;
RHANDLE ahRecs[2];
 . . .
/* Код республики по названию */
htKeySearch( NULL, &sCode, hRepub, 2, EQUAL, "КАЗАХСТАН", NULL );
/* Мужчины-больные */
htKeySearch( NULL, &sMen, hClient, 3, EQUAL, "M", NULL );
/* Больные мужчины из Казахстана */
htTablesJoin( &sTmp, &sCode, 1, EQUAL, &sMen, 4, NULL, 0 );
/* Открыть доступ к результатам */
htOpenResults( &sTmp, ROPEN_READ, NULL, 0 );
/* Получить первый элемент слияния как шаблон (все из Казахстана) */
htGetResultsItem( &sTmp, 0L, ahRecs );
/* Предполагается, что код Казахстана 200 */
sCil.code = 200;
/* Добавить новую запись в таблицу больных */
/* Предполагается, что таблица больных первая в слиянии */
htHandleAdd( hClient, &sCli, ahRecs );
/* Добавить элемент в конец слияния */
htIncludeResultsItem( &sTmp, sTmp.gFoundCnt, ahRecs );
 . . .