Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

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

Назначение

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

В процессе вывода результатов производится необходимая перекодировка символьных данных. Например, если таблица исходного результата - ANSI-таблица, а выходная - OEM-таблица, будет выполнено преобразование AnsiToOem. Подобное преобразование выполняется для всех типов результата, кроме RES_GROUP.

Прототип:

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

Параметры

fpSrc задает адрес БДС, содержащего результаты поиска
hOutTable задает обработчик таблицы, в которую будут выводится результаты поиска
fpfRecProc задает адрес пользовательской функции преобразования данных
fpfErrProc задает адрес пользовательской функции обработки ошибок
fpUser содержит дополнительный параметр, передаваемый пользователем для своей функции преобразования данных. Если он не нужен, следует задать NULL
fpElemNo адрес массива целых, определяющих номера полей записей
nElemCnt задает число полей отбора. Имеет смысл лишь при задании массива номеров полей для чтения
nDenyOut задает режим обработки записей с дубликатами уникальных ключей или недопустимыми значениями. Если параметр nDenyOut равен 0, записи просто удаляются. Если же параметр задан отличным от нуля, такие записи будут собраны в отдельную таблицу с именем PROBLEM
nAutoInc задает режим заполнения значений суррогатного и автоинкрементных ключей

Параметр fpfRecProc

задает адрес пользовательской функции преобразования данных. Именно эта функция должна выполнить обработку каждого элемента результата и превратить его в запись выходной таблицы. Функция вызывается для каждого элемента результатов. Если функция не задана (NULL), элемент результата просто копируется в запись. Функция обработки имеет прототип RFUNC

Параметр fpfErrProc

задает адрес пользовательской функции обработки ошибок, которая будет вызываться htResultsToTable в случае обнаружения ошибок. Функция обработки имеет прототип EFUNC. Если функция обработки ошибок не задана (ее адрес NULL), используется "внутренняя" функция, прекращающая операцию при первой же ошибке (возвращает ERROR_ABORT).

Параметр fpElemNo

допустим лишь для результатов поиска, содержащих записи или связку таблиц. Он содержит адрес массива целых, определяющих номера полей записей-результатов, которые будут читаться в процессе вывода. Пользовательская функция обработки будет получать данные, содержащие только те поля исходной записи(ей), номера которых были указаны в пятом параметре. Если параметр опущен (NULL), исходные записи будут отбираться целиком. Записи не будут иметь физического номера. Этот номер будет передан в поле gSrcItemNum структуры RPARM.

Параметр nAutoInc

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

Результат

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

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

Пример.

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

typedef struct tagSTAFF { /* Структура записи таблицы работников */
	char		name[15];
	unsigned 	year_of_birth;
 } STAFF;
typedef struct tagHISTO { /* Структура записи таблицы гистограммы */
	unsigned	year_of_birth;
	long		count;
} HISTO;
ELEMENT asElem[] = {
	 { 0, 0, EC_FIELD, ET_WORD, EK_NOTKEY, "Birth" },
	 { 0, 0, EC_FIELD, ET_LONG, EK_NOTKEY, "Count" }
};
THANDLE	hHisto;
THANDLE	hStaff;
int	rc;
 . . .
/* Гистограмма годов рождения */
htHistogramOfKey( &sHisto, 2, htSearch( NULL, &sSet,
		 hStaff, 0, GREAT, "\0\0\0", NULL ) );
 . . .
/* Таблица для хранения гистограммы */
htTableCreate( "Histo", asElem, sizeof(asElem) / sizeof(ELEMENT),
		 NULL, NULL, NULL, TAB_PRIVATE, &hHisto );
 . . .
/* Вывод гистограммы в таблицу */
htResultsToTable( &sHisto, hHisto, NULL, NULL, NULL, NULL, 0, 0, 1 );
 . . .