Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

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

htTableCreate - Создать новую таблицу

Назначение:

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

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

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

Прототип:

int HTAPI htTableCreate(
  char far 	*fpTableName,	/* Имя таблицы (можно без расширения) */
  LPELEMENT	fpElems,     	/* Описатели элементов таблицы */
  int      	nElemCnt,    	/* Число описателей элементов */
  char far 	*fpCryptoKey,	/* Ключ для крипто-закрытия данных */
  char far 	*fpReadPswd, 	/* Пароль для доступа на чтение */
  char far 	*fpWritePswd,	/* Пароль для доступа на запись */
  int      	nOpenMode,   	/* Режим открытия (константы TAB_???? ) */
  LPTHANDLE	fpHandle     	/* Для приема обработчика таблицы */
);

Параметры:

fpTableName
имя файла описания таблицы (с указанием полного или частичного пути), расширение задавать не обязательно
fpElems
задает адрес массива описателей элементов таблицы. Описания производных элементов записи (группы и подстроки) должны располагаться после описания полей. В поле таких элементов указывается:
wOffset
порядковый номер (отсчет от 1) первого поля таблицы, входящего в группу или образующего подстроку
wLength
для группы указывается число смежных полей, образующих группу. Для подстроки содержит смещение подстроки относительно начала образующего поля (отсчет от 1)
cType
Длина подстроки (тип подстроки может быть только ET_CHAR).
nElemCnt
задает число элементов таблицы (размерность массива описателей).
fpCryptoKey
задает строку, используемую в качестве пароля для крипто-закрытия данных. Значащими являются только первые 8 символов. Если пароль не нужен, можно задать NULL или пустую строку "".
fpReadPswd
задает строку, используемую в качестве пароля для доступа к таблице на чтение. Значащими являются только первые 8 символов. Если пароль не нужен, можно задать NULL или пустую строку "".
fpWritePswd
задает строку, используемую в качестве пароля для доступа к таблице на запись. Значащими являются только первые 8 символов. Если пароль не нужен, можно задать NULL или пустую строку "".
nOpenMode
задает флаги открытия ( TAB_??? )
fpHandle
задает адрес переменной для занесения обработчика создаваемой таблицы.

Результат:

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

Пример.

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

/* При создании таблицы смещение полей рассчитывает СУБД */
/* Длина поля имеет смысл только для символьных полей */
ELEMENT asElem[] = {
	 { 10, 0, EC_FIELD, ET_CHAR, EK_NOTKEY, "Frst_Name" },
	 { 10, 0, EC_FIELD, ET_CHAR, EK_NOTKEY, "Scnd_Name" },
	 { 0, 0, EC_FIELD, ET_BYTE, EK_NOTKEY, "Sex" },
	 { 0, 0, EC_FIELD, ET_WORD, EK_NOTKEY, "Salary" },
 /* Группа, включающая первое и второе имя, образующая ключ */
	 { 2, 1, EC_GROUP, ET_CHAR, EK_COMMON, "Name" },
 /* Подстрока от второго имени, состоящая из первых пяти символов */
	 { 1, 2, EC_SUBSTR, 5, EK_COMMON, "Substr" }
 };
 THANDLE hNew;
 int	rc;
 rc = htTableCreate( "staff", asElem, sizeof(asElem) / sizeof(ELEMENT),
	 "password", NULL, NULL, TAB_PRIVATE, &hNew );
 if( rc < 0 )
	/* Обработка ошибок */