Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htRepairTable - Восстановить таблицу адресов постоянной части

Назначение:

Постоянная часть таблицы должна иметь таблицу адресов, размещаемую в начале файла ассоциатора (см. "Структура файлов таблицы" ). Эта таблица строится в процессе создания постоянной части процедурой обновления таблицы ( htUpdateTable ). Таблица нужна для определения местоположения записей в постоянной части таблицы (записи там имеют переменную длину).

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

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

После восстановления ассоциатора и возможной коррекции области данных таблица оказывается в следующем состоянии:

  • переменная часть таблицы создана, если ее не было;
  • индексы удалены;
  • постоянная часть таблицы не изменилась;
  • таблица адресов записей (в ассоциаторе) исправлена;
  • поврежденные записи постоянной части помечены как удаленные.

При наличии поврежденных записей рекомендуется выполнение функции htUpdateTable с последующей индексацией.

Прототип:

long HTAPI htRepairTable(
  char far	*fpTableName,	/* Имя таблицы (можно без расширения) */
  char far	*fpReadPswd,	/* Пароль доступа на чтение */
  char far	*fpWritePswd	/* Пароль доступа на запись */
);

Параметры:

fpTableName задает имя (полное или частичное) таблицы. Имя можно задавать без расширения.
fpReadPswd задает пароль доступа на чтение. Если не нужен, можно задать NULL или пустую строку "".
fpWritePswd задает пароль доступа на запись. Если не нужен, можно задать NULL или пустую строку "".

Результат:

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

Пример.

При открытии доступа к таблице обнаружено отсутствие или повреждение ассоциатора (таблицы адресов записей постоянной части). Восстановить таблицу адресов.

long	rc; 
THANDLE	hTable;
char	TabName[] = "damaged";
rc = htTableOpen( TabName, NULL, NULL, TAB_PRIVATE, &hTable );
if( rc < 0 && rc == -HT_ERR_ASSO_DAMAGED ) {
	if( htRepairTable( TabName, NULL, NULL ) > 0 )
		htUpdateTable( TabName, NULL, NULL, 1, 1 );
 }
 . . .