Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htReplaceResultsItem - Подменить элемент в результатах поиска

Назначение:

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

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

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

При необходимости удалить ссылку на запись одной из таблиц слияния следует считать элемент результата htGetResultsItem и заменить соответствующий обработчик в элементе-векторе на пустой. После этого надо подменить элемент результата функцией htReplaceResultsItem.

Прототип:

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

Параметры

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

Результат

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;
 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 );
 /* Открыть доступ к результатам */
 htOpenResulst( &sTmp, ROPEN_READ, NULL, 0 );
 /* Получить третий элемент слияния */
 htGetResultsItem( &sTmp, 2L, ahRecs );
 /* Найти обработчик для требуемого названия республики */
 /* Предполагается, что таблица республик вторая в слиянии */
 htRecordByUniq( NULL, hRepub, 2, "РОССИЯ", ahResc+1);
 /* Подменить элемент слияния */
 htReplaceResultsItem( &sTmp, 2L, ahRecs );
 . . .