次の方法で共有


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

作成するインデックスの名前。

名前は、次の規則に従って書式設定する必要があります。

  • 終端の NULL を含めず、JET_cbNameMost未満にする。

  • 0 から 9、A から Z、a から z、および "!" を除く他のすべての句読点のセットで構成されます。(感嘆符)、"、" (コンマ)、"[" (始め角かっこ)、"]" (右角かっこ) — つまり、ASCII 文字0x20、0x2d 0x22、0x5a、0x5c、0x5dから0x7fを0x2f。

  • スペースで始まりはしません。

  • 少なくとも 1 つの非スペース文字で構成されます。

lPages

テーブルに割り当てるデータベース ページの初期数。 1 より大きい数値を指定すると、このテーブルに多数の行が挿入された場合に断片化が軽減される可能性があります。

lDensity

パーセンテージ ポイント単位のテーブル密度。 数値は、0 または 20 から 100 の範囲である必要があります。 0 を渡すと、既定値を使用する必要があります。 既定値は 80 です。

ptableid

成功すると、このフィールドにテーブル識別子が返されます。 API がJET_errSuccessを返さない場合、値は未定義です。

戻り値

この関数は、次のいずれかの戻りコードを 使用して、JET_ERR データ型を返します。 考えられる ESE エラーの詳細については、「 拡張ストレージ エンジン エラーエラー処理パラメーター」を参照してください。

リターン コード

説明

JET_errSuccess

操作は正常に完了しました。

JET_errCallbackNotResolved

コールバック関数を解決できませんでした。 DLL が見つからないか、DLL 内の関数が見つからない可能性があります。 十分なログ記録を有効にすると、イベント ログに詳細が表示されます。

JET_errCannotIndex

エスクロー更新または SLV 列にインデックスを作成しようとしました (SLV 列は非推奨であることに注意してください)。

JET_errCannotNestDDL

ptablecreate-grbit> でJET_bitTableCreateTemplateTableが指定されているが、ptablecreate-szTemplateTableName> が NULL に設定されている場合。

JET_errColumnDuplicate

列は既に存在します。

JET_errColumnNotFound

存在しない列に対してインデックスを作成しようとしました。 存在しない列に対して条件付きでインデックスを作成しようとすると、このエラーが発生する可能性もあります。

JET_errColumnRedundant

冗長列を追加しようとしました。 1 つ以上の自動作成列は存在せず、テーブルごとに 1 つ以上のバージョン列は存在しない必要があります。

JET_errDensityInvalid

JET_TABLECREATEまたは JET_TABLECREATE2 構造体の ulDensity メンバーに無効な密度渡されました。

JET_errDDLNotInheritable

JET_TABLECREATE 構造体の szTemplateTableName メンバーにという名前のテーブルがテンプレート テーブルとしてマークされていないことを示します (つまり、そのテーブルにJET_bitTableCreateTemplateTableが設定されていません)。

JET_errIndexDuplicate

2 つの同じインデックスを定義しようとしました。

JET_errIndexHasPrimary

1 つのテーブルに対して複数のプライマリ インデックスを指定しようとしました。 テーブルには、プライマリ インデックスが 1 つだけ必要です。 プライマリ インデックスが指定されていない場合、データベース エンジンは透過的に作成します。

JET_errIndexInvalidDef

無効なインデックス定義が指定されました。 このエラーを受け取る理由として、次の一部が考えられます。

  • プライマリ インデックスは条件付きです (つまり、JET_INDEXCREATE構造体の grbit メンバーがJET_bitIndexPrimary設定され、JET_INDEXCREATE構造体の cConditionalColumn メンバーが 0 より大きい場合)。

  • Windows Server 2003 以降。 タプルの制限を持つタプル インデックスを作成しようとしていますが、JET_INDEXCREATE 構造体で ptuplelimits メンバーを渡さずに (つまり、JET_INDEXCREATE構造体の grbit メンバーにJET_bitIndexTupleLimits設定されていますが、ptuplelimits ポインターは NULL です)。

  • JET_INDEXCREATE構造体の szKey メンバーに無効なキー定義を渡します。 有効な定義については、「 JET_INDEXCREATE 」を参照してください。

  • JET_INDEXCREATEcbVarSegMac メンバーを (プライマリ インデックスの場合) JET_cbPrimaryKeyMostより大きいか、JET_cbSecondaryKeyMostより大きい (セカンダリ インデックスの場合) に設定します。

  • ユーザー定義 Unicode インデックス (JET_INDEXCREATE の grbit メンバーにJET_bitIndexUnicode ビットが設定されている インデックス) に無効な組み合わせを渡します。 一般的な原因としては、JET_INDEXCREATE構造体の pidxunicode メンバーが NULL であるか、pidxunicode 構造体で指定された LCID が無効である場合があります。

  • プライマリ インデックスの複数値列の指定。

  • インデックスを作成しようとしている条件列が多すぎます。 JET_INDEXCREATE構造体の cConditionalColumn メンバーは、JET_ccolKeyMostより大きくすることはできません。

JET_errIndexTuplesInvalidLimits

Windows XP 以降。 JET_TUPLELIMITS構造体が指定されており、その制限はサポートされていません。 JET_TUPLELIMITS構造の解説セクションを参照してください。

JET_errIndexTuplesNonUniqueOnly

Windows XP 以降。 タプル インデックスを一意にすることはできません (つまり、JET_INDEXCREATE構造体の grbit メンバーに JET_bitIndexPrimary とJET_bitIndexUniqueの両方を設定することはできません)。

JET_errIndexTuplesOneColumnOnly

Windows XP 以降。 タプル インデックスは、1 つの列に対してのみ使用できます (つまり、JET_INDEXCREATE構造体の grbit メンバーがJET_bitIndexTuples設定されていて、JET_INDEXCREATE構造体の szKey メンバーが複数の列を指定している場合)。

JET_errIndexTuplesSecondaryIndexOnly

Windows XP 以降。 タプル インデックスをプライマリ インデックスにすることはできません (つまり、JET_INDEXCREATE 構造体の grbit メンバーに JET_bitIndexPrimary とJET_bitIndexTuplesの両方を設定することはできません)。

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP 以降。 タプル インデックスでは、JET_INDEXCREATE構造体の cbVarSegMac メンバーを設定できません。

JET_errIndexTuplesTextColumnsOnly

Windows XP 以降。 タプル インデックスは、テキスト列または Unicode 列にのみ使用できます。 他の列 (バイナリ列など) のインデックスを作成しようとすると、JET_errIndexTuplesTextColumnsOnlyが発生します。

JET_errInTransaction

トランザクション中に、バージョン情報のないインデックスを作成しようとしました。

JET_errInvalidCodePage

JET_COLUMNCREATE構造体の cp メンバーが有効なコード ページに設定されていません。 テキスト列の有効な値は、英語 (1252) と Unicode (1200) のみです。 値 0 は、既定値 (英語、1252) が使用されることを意味します。

JET_errInvalidColumnType

JET_COLUMNCREATE構造体の coltyp メンバーが有効な列型に設定されていません。

JET_errInvalidCreateIndex

このエラーが発生する理由の一部を次に示します。

  • JET_TABLECREATE2構造体の rgindexcreate メンバーが NULL に設定されました。

  • JET_TABLECREATE2構造体の rgcolumncreate メンバーが NULL に設定されました。

  • JET_INDEXCREATE構造体の cbStruct メンバーが有効な値に設定されていませんでした。

JET_errInvalidgrbit

grbit メンバーの無効な組み合わせが、JET_TABLECREATEまたはJET_TABLECREATE2で指定されました。

grbit メンバーに不整合な値が含まれているため、インデックス定義が無効です。 考えられる理由は次のとおりです。

  • プライマリ インデックスには、無視ビットが指定されています (つまり、JET_bitIndexIgnoreNull、JET_bitIndexIgnoreAnyNull、またはJET_bitIndexIgnoreFirstNullで渡されたJET_bitIndexPrimary)。

  • 空のインデックスでは、NULL メンバーは無視されません (つまり、JET_INDEXCREATE 構造体の grbit メンバーにはJET_bitIndexEmptyが設定されていますが、JET_bitIndexIgnoreAnyNullが設定されていません)。

  • 無効な grbit メンバーを持つJET_CONDITIONALCOLUMN構造体を渡します。

JET_errInvalidLanguageId

無効なロケール ID (LCID) が渡されました (JET_INDEXCREATE構造体の pidxunicode メンバーが指すJET_UNICODEINDEX構造体の lcid メンバーを介するか、JET_INDEXCREATE構造体の lcid フィールドを介して)。

JET_errInvalidParameter

無効なパラメーターが指定されました。 考えられる理由は次のとおりです。

  • JET_TABLECREATE2構造体の rgcolumncreate メンバーは NULL です。

  • JET_TABLECREATE2 構造体の rgcolumncreate メンバーに指定されたJET_COLUMNCREATE構造体の 1 つの cbStruct メンバーが sizeof( JET_COLUMNCREATE ) に設定されていませんでした。

  • JET_INDEXCREATE構造体の cbKey メンバーは 0 に設定されます。

  • JET_INDEXCREATE構造体の cbStruct メンバーが sizeof( JET_INDEXCREATE ) に設定されていません。

JET_errRecordTooBig

レコードが大きすぎます。 すべての固定列のJET_COLUMNCREATE構造体の cbMax メンバーの合計は、特定の値を超えてはなりません。

JET_errTableDuplicate

テーブルは既に存在します。

JET_errTooManyColumns

テーブルに列を追加しようとしました。 テーブルには、固定列JET_ccolFixedMost以下、可変長列JET_ccolVarMost以下、およびタグ付き列JET_ccolTaggedMost以下を含めることができます。

JET_errUnicodeTranslationFail

Unicode 列の正規化中にエラーが発生しました。 これは、システム リソースが不足していることが原因で発生する可能性があります。

解説

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 構造体の他のすべてのフィールドは、0 または NULL に設定されます。 出力時に 、ptableid は JET_TABLECREATE2.tableid に設定されます。

詳細については、「 JetCreateTableColumnIndex2 」を参照してください。

JetOpenTable と同様に、JET_TABLECREATE2構造体から返された tableid メンバーを使用してアプリケーションを実行する場合は、通常、JetCloseTable で閉じる必要があります。

必要条件

要件

Client

Windows Vista、Windows XP、または Windows 2000 Professional が必要です。

[サーバー]

Windows Server 2008、Windows Server 2003、または Windows 2000 Server が必要です。

Header

Esent.h で宣言されています。

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

Unicode

JetCreateTableW (Unicode) および JetCreateTableA (ANSI) として実装されます。

参照

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2