Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htCodedResultsToTable - Вывести кодированные записи в таблицу

Назначение:

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

Прототип:

 long HTAPI htCodedResultsToTable(
	LPSAB     fpSrc,      /* Адрес исходного БДС */
	THANDLE   hOutTable,  /* Обработчик для заполняемой таблицы */
	LPRFUNC   fpfRecProc, /* Пользовательская функция обработки записи */
	LPEFUNC   fpfErrProc, /* Пользовательская функция обработки ошибок */
	void far *fpUser,     /* Доп.параметр пользователя */
	LPCDF     fpFields,   /* Номера кодированных элементов исх.записи */
	int       nFieldCnt,  /* Число выводимых элементов */
	int       nDenyOut,   /* != 0 вывод отвергнутых записей в таблицу */
	int	  nCorrect    /* != 0 корректировать суррогатный и авто-ключи */
 );

Параметры

fpSrc задает адрес БДС, содержащего результаты поиска
hOutTable задает обработчик таблицы, в которую будут выводится результаты поиска
fpfRecProc задает адрес пользовательской функции преобразования данных. Функция должна иметь тип RFUNC
fpfErrProc задает адрес пользовательской функции обработки ошибок, которая будет вызываться htCodedResultsToTable в случае обнаружения ошибок. Функция должна иметь тип EFUNC
fpUser может содержать дополнительный параметр, передаваемый пользователем для своей функции преобразования данных. Если он не нужен, следует задать NULL
fpFields содержит адрес массива структур, описывающих номера читаемых в процессе вывода полей записей-результатов и их возможные кодификаторы. Пользовательская функция обработки будет получать данные, содержащие только те поля исходной записи(ей), номера которых были указаны в пятом параметре. Кодированные поля будут представлены в раскодированном виде (заполнены толкованиями). Параметр не может содержать NULL и должен быть задан обязательно
nFieldCnt задает число описателей полей отбора
nDenyOut задает режим обработки записей с дубликатами уникальных ключей или недопустимыми значениями. Подробное описание параметра см. в описании функции htResultsToTable
nCorrect управляет режимом заполнения значений суррогатного и автоинкрементных ключей. Если этот параметр установлен в TRUE, эти значения приваиваются автоматически с наращением. Иначе, значения этих ключей принимают значения, присвоенные пользователем. Это может оказаться полезным при выводе данных из одной таблицы с суррогатным ключом в другую с целью сохранения даннных (переупорядочение значений суррогатного или автоинкрементных ключей приведет к нарушению целостности данных). В остальных случаях должен быть выбран режим автоматического заполнения.

Результат:

В качестве кода завершения функция htCodedResultsToTable возвращает длинное целое со знаком.

меньше 0L код ошибки
больше 0 счетчик отвергнутых записей
0L отвергнутых записей не найдено

Пример.

Вывести кодированную таблицу в раскодированную. Проверка кодов завершения опущена для простоты.

 typedef struct tagSEX { /* Структура записи таблицы полов */
     char sex;	 /* Пол (кодированный) */
     char name[7]; /* Полное наименование пола */
 } SEX;
 typedef struct tagSTAFF { /* Структура кодированной таблицы */
     char	Fname[20]; /* Фамилия */
     char	Sex;	 /* Пол (кодированный) */
     word	Birthday; /* Дата рождения */
 } STAFF;
 typedef struct tagFULL { /* Структура полной таблицы */
     char	Fname[20]; /* Фамилия */
     char	Sex[7];	 /* Пол (полное наименование) */
     word	Birthday; /* Дата рождения */
 } FULL;
 ELEMENT asElem[] = {
	 { 20, 0, EC_FIELD, ET_CHAR, EK_NOTKEY, "Name" },
	 { 7, 0, EC_FIELD, ET_CHAR, EK_NOTKEY, "Sex" },
	 { 0, 0, EC_FIELD, ET_WORD, EK_NOTKEY, "Birth" },
 };
 CHANDLE hSex;
 THANDLE hFull;
 THANDLE hStaff;
 int rc;
 int sex;
 int anFields[] = { 1, 2 };
 CDF asCodes[3];
 SAB sAll;

 . . .
 /* Загрузить кодификатор */
 htLoadCoder( "\\table\\sex", NULL, TAB_SHARE, anFields,
		 sizeof(anFields)/sizeof(int), &hSex );
 . . .
 /* Таблица для "полных" записей */
 htTableCreate( "Full", asElem, sizeof(asElem) / sizeof(ELEMENT),
		 NULL, NULL, NULL, TAB_PRIVATE, &hFull );
 . . .
 /* Искать работников */
 htSearch( NULL, &sAll, hStaff, 0, GREAT, "\0\0\0", NULL );
 . . .
 /* Подготовить описатели полей */
 asCodes[0].nFieldNo = 1; asCodes[0].hCoder = 0;
 asCodes[1].nFieldNo = 2; asCodes[1].hCoder = sex;
 asCodes[2].nFieldNo = 3; asCodes[2].hCoder = 0;
 /* Построение полной таблицы */
 htCodedResultsToTable( &sAll, hFull, NULL, NULL, NULL, asCodes,
		sizeof(asCodes)/sizeof(CDF), 0, 1 );
 . . .