Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htChangeKeyType - Сменить тип ключа для элемента таблицы

Назначение:

Функция предназначена для динамического изменения типа ключа у элементов таблицы. Если таблица не имеет постоянной части и не проиндексирована, смена типа ключа сводится к замене признака в описателе таблицы. При наличии постоянной части функция приводит к построению индекса для заданного элемента или его удалению.

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

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

Прототип:

 long HTAPI htChangeKeyType(
  char far	*fpTableName, 	/* Имя таблицы */
  char far	*fpReadPswd,	/* Пароль доступа на чтение */
  char far	*fpWritePswd,	/* Пароль доступа на запись */
  int		nElemNo, 	/* Номер элемента таблицы (от 1) */
  int		nNewKeyType, 	/* Новый тип ключа */
  int		nTestSpace, 	/* Проверка пространства на диске */
  int		nDenyOut	/* Вывод отвергнутых записей в таблицу */
 );

Параметры:

fpTableName Имя таблицы
fpReadPswd Пароль доступа на чтение
fpWritePswd Пароль доступа на запись
nElemNo Номер элемента таблицы (от 1)
nNewKeyType Новый тип ключа
nTestSpace Проверка пространства на диске. Перед выполнением операции можно оценить доступное дисковое пространство, для чего следует задать параметр nTestSpace отличным от 0.
nDenyOut Задает режим обработки записей с дубликатами уникальных ключей. Если параметр nDenyOut равен 0, записи просто удаляются. Если же параметр задан отличным от нуля, такие записи будут собраны в отдельную таблицу с именем PROBLEM.HTB

Результат

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

< 0 код ошибки
> 0 количество отвергнутых записей
= 0 Отвергнутых записей не найдено

Пример.

Сделать второе поле таблицы уникальным ключом, с выводом отвергнутых записей в таблицу PROBLEM. Места на диске много. Доступ к таблице осуществляется без пароля.

#define TRUE 1
#define FALSE 0
long	rc;
rc = htChangeKeyType( "table", NULL, NULL, 2, EK_UNIQUE, FALSE, TRUE );
if( rc < 0L )
	/* Обработка ошибок */
else if( rc == 0L )
	/* Успешное завершение */
else
	/* Отвергнуто rc записей */