Поделиться через


Функция JetCreateTable

Применимо к: Windows | Windows Server

Функция JetCreateTable

Функция JetCreateTable создает пустую таблицу в базе данных ESE.

    JET_ERR JET_API JetCreateTable(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          const tchar* szTableName,
      __in          unsigned long lPages,
      __in          unsigned long lDensity,
      __out         JET_TABLEID* ptableid
    );

Параметры

sesid

Используемый контекст сеанса базы данных.

dbid

Используемый идентификатор базы данных.

szTableName

Имя создаваемого индекса.

Имя должно быть отформатировано в соответствии со следующими правилами:

  • Значение меньше JET_cbNameMost, не включая завершающее значение NULL.

  • Состоит из следующего набора символов: от 0 до 9, от A до Z, от a до z и всех других знаков препинания, кроме "!" (восклицательный знак), "," (запятая), "[" (открывающая скобка) и "]" (закрывающая скобка) — символы ASCII 0x20, 0x22 0x2d, 0x2f 0x5a, 0x5c 0x5d 0x7f.

  • Не начинайте с пробела.

  • Должен быть сделан по крайней мере из одного символа, не являющегося пробелом.

lPages

Начальное количество страниц базы данных, выделяемых для таблицы. Если в эту таблицу вставляется несколько строк, можно уменьшить фрагментацию.

lDensity

Плотность таблицы в процентных пунктах. Число должно быть либо 0, либо находиться в диапазоне от 20 до 100. Передача 0 означает, что следует использовать значение по умолчанию. Значение по умолчанию — 80.

ptableid

При успешном выполнении идентификатор таблицы возвращается в этом поле. Значение не определено, если API не возвращает JET_errSuccess.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errCallbackNotResolved

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

JET_errCannotIndex

Предпринята попытка индексировать столбец escrow-update или SLV (обратите внимание, что столбцы SLV устарели).

JET_errCannotNestDDL

Если ptablecreate-grbit> указывает JET_bitTableCreateTemplateTable, а для ptablecreate-szTemplateTableName> задано значение NULL.

JET_errColumnDuplicate

Столбец уже существует.

JET_errColumnNotFound

Предпринята попытка индексировать несуществующий столбец. Попытка условно проиндексировать несуществующий столбец также может привести к этой ошибке.

JET_errColumnRedundant

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

JET_errDensityInvalid

В элементе ulDensity в структуре JET_TABLECREATE или JET_TABLECREATE2 передана недопустимая плотность.

JET_errDDLNotInheritable

Означает, что таблица с именем в элементе szTemplateTableName структуры JET_TABLECREATE не была помечена как таблица-шаблон (то есть в этой таблице не было задано JET_bitTableCreateTemplateTable).

JET_errIndexDuplicate

Предпринята попытка определить два идентичных индекса.

JET_errIndexHasPrimary

Предпринята попытка указать несколько первичных индексов для таблицы. Таблица должна иметь ровно один первичный индекс. Если первичный индекс не указан, ядро СУБД будет прозрачно создавать его.

JET_errIndexInvalidDef

Указано недопустимое определение индекса. Ниже приведены некоторые из возможных причин возникновения этой ошибки.

  • Первичный индекс является условным (то есть элемент grbitструктуры JET_INDEXCREATE имеет JET_bitIndexPrimary задано, а элемент cConditionalColumnструктуры JET_INDEXCREATE больше нуля).

  • Windows Server 2003 и более поздние версии. Попытка создать индекс кортежа с ограничениями кортежа, но без передачи элемента ptuplelimits в структуре JET_INDEXCREATE (то есть элемент grbitструктуры JET_INDEXCREATE имеет JET_bitIndexTupleLimits задан, но указатель ptuplelimits имеет значение NULL).

  • Передача недопустимого определения ключа в элементе szKeyструктуры JET_INDEXCREATE . Сведения о допустимых определениях см. в JET_INDEXCREATE .

  • Задание элемента cbVarSegMac в JET_INDEXCREATE больше JET_cbPrimaryKeyMost (для первичного индекса) или больше JET_cbSecondaryKeyMost (для вторичного индекса).

  • Передача недопустимого сочетания для определяемого пользователем индекса Юникода (который содержит бит JET_bitIndexUnicode, заданный в элементе grbitJET_INDEXCREATE). Некоторые распространенные причины включают в себя элемент pidxunicodeструктуры JET_INDEXCREATE имеет значение NULL или LCID, указанный в структуре pidxunicode , является недопустимым.

  • Указание многозначного столбца для первичного индекса.

  • Попытка индексировать слишком много условных столбцов. Элемент cConditionalColumn структуры JET_INDEXCREATE не должен быть больше JET_ccolKeyMost.

JET_errIndexTuplesInvalidLimits

Windows XP и более поздних версий. Указана JET_TUPLELIMITS структура, и ее ограничения не поддерживаются. См. раздел примечаний структуры JET_TUPLELIMITS .

JET_errIndexTuplesNonUniqueOnly

Windows XP и более поздних версий. Индекс кортежа не может быть уникальным (то есть элемент grbitструктуры JET_INDEXCREATE не должен иметь JET_bitIndexPrimary и JET_bitIndexUnique).

JET_errIndexTuplesOneColumnOnly

Windows XP и более поздних версий. Индекс кортежа может находиться только над одним столбцом (то есть, если элемент grbitструктуры JET_INDEXCREATE задан JET_bitIndexTuples, а элемент szKey структуры JET_INDEXCREATE указывает более одного столбца).

JET_errIndexTuplesSecondaryIndexOnly

Windows XP и более поздних версий. Индекс кортежа не может быть первичным индексом (то есть элемент grbitструктуры JET_INDEXCREATE не должен иметь JET_bitIndexPrimary и JET_bitIndexTuples).

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP и более поздних версий. Индекс кортежа не позволяет задать элемент cbVarSegMacструктуры JET_INDEXCREATE .

JET_errIndexTuplesTextColumnsOnly

Windows XP и более поздних версий. Индекс кортежа может находиться только в текстовом столбце или столбце Юникода. Попытка индексировать другие столбцы (например, двоичные столбцы) приведет к JET_errIndexTuplesTextColumnsOnly.

JET_errInTransaction

Предпринята попытка создать индекс без сведений о версии во время транзакции.

JET_errInvalidCodePage

Член cp структуры JET_COLUMNCREATE не имеет допустимой кодовой страницы. Единственными допустимыми значениями текстовых столбцов являются английский (1252) и Юникод (1200). Значение 0 означает, что будет использоваться значение по умолчанию (английский язык, 1252).

JET_errInvalidColumnType

Член coltypструктуры JET_COLUMNCREATE не имеет допустимого типа столбца.

JET_errInvalidCreateIndex

Эта ошибка может возникать по следующим причинам:

JET_errInvalidgrbit

В JET_TABLECREATE или JET_TABLECREATE2 указано недопустимое сочетание элементов grbit.

Определение индекса является недопустимым, так как элемент grbit содержит несогласованные значения. Ниже приведены некоторые возможные причины.

  • В основном индексе указан бит пропуска (то есть JET_bitIndexPrimary был передан с JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull или JET_bitIndexIgnoreFirstNull).

  • Пустой индекс не игнорирует элементы NULL (то есть элемент grbitструктуры JET_INDEXCREATE имеет JET_bitIndexEmpty задано, но не имеет JET_bitIndexIgnoreAnyNull).

  • Передача структуры JET_CONDITIONALCOLUMN с недопустимым элементом grbit .

JET_errInvalidLanguageId

Был передан недопустимый код языкового стандарта (LCID) (либо через элемент lcidструктуры JET_UNICODEINDEX , на который указывает элемент pidxunicode в структуре JET_INDEXCREATE , либо через поле lcid структуры JET_INDEXCREATE ).

JET_errInvalidParameter

Указан недопустимый параметр. Ниже приведены некоторые возможные причины.

JET_errRecordTooBig

Запись слишком велика. Сумма элемента cbMaxструктуры JET_COLUMNCREATE для всех фиксированных столбцов не должна превышать определенное значение.

JET_errTableDuplicate

Таблица уже существует.

JET_errTooManyColumns

Предпринята попытка добавить в таблицу слишком много столбцов. Таблица может содержать не более JET_ccolFixedMost фиксированных столбцов, не более JET_ccolVarMost столбцов переменной длины и не более JET_ccolTaggedMost столбцов с тегами.

JET_errUnicodeTranslationFail

Произошла ошибка при попытке нормализовать столбец Юникода. Это может быть вызвано отсутствием системных ресурсов.

Комментарии

JetCreateTable создает таблицу, которая не содержит столбцов. Сведения о добавлении столбцов см. в разделе JetAddColumn.

На внутреннем сервере JetCreateTable вызывает JetCreateTableColumnIndex2, заполняя структуру JET_TABLECREATE2 следующим образом:

  • JET_TABLECREATE2.cbStruct = sizeof( JET_TABLECREATE2 )

  • JET_TABLECREATE2.szTableName = szTableName

  • JET_TABLECREATE2.ulPages = lPage

  • JET_TABLECREATE2.ulDensity = lDensity

  • JET_TABLECREATE2.tableid = JET_tableidNil

Для всех остальных полей внутренней структуры JET_TABLECREATE2 задано значение null или NULL. В выходных данных ptableid будет иметь значение JET_TABLECREATE2.tableid.

Дополнительные сведения см. в разделе JetCreateTableColumnIndex2 .

Как и JetOpenTable, когда приложение выполняется с помощью возвращаемого элемента tableid из структуры JET_TABLECREATE2 , его обычно следует закрывать с помощью JetCloseTable.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Профессиональная.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetCreateTableW (Юникод) и JetCreateTableA (ANSI).

См. также:

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2