次の方法で共有


JetCreateIndex4W 関数

適用対象: Windows |Windows Server

JetCreateIndex4W 関数は、Extensible Storage Engine (ESE) データベース内のデータに対するインデックスを作成します。このデータベースを使用すると、特定のデータをすばやく見つけることができます。

JetCreateIndex4W 関数は、Windows 8 オペレーティング システムで導入されました。

JET_ERR JET_API JetCreateIndex4W(
  __in          JET_SESID sesid,
  __in          JET_TABLEID tableid,
  __in          JET_INDEXCREATE2* pindexcreate,
  __in          unsigned long cIndexCreate
);

パラメーター

sesid

API 呼び出しに使用するデータベース セッション コンテキスト。

tableid

インデックスが作成されるテーブル。

pindexcreate

作成するインデックスを定義するJET_INDEXCREATE2構造体の配列。

cIndexCreate

pindexcreate 配列内の要素の数。

戻り値

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

リターン コード

説明

JET_errSuccess

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

JET_errCannotIndex

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

JET_errColumnNotFound

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

JET_errDensityInvalid

このエラーは、JET_INDEXCREATE2構造体の ulDensity メンバーが 20 未満または 100 より大きい数値に設定されている場合に返されます。

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

無効なインデックス定義が指定されました。 このエラーの原因として考えられる理由を次に示します。

  • プライマリ インデックスは条件付きです (JET_INDEXCREATE2grbit メンバーがJET_bitIndexPrimary設定され、JET_INDEXCREATE2cConditionalColumn メンバーが 0 より大きい)。

  • Windows Server 2003 以降の Windows のバージョンに適用されます。 タプルの制限を持つタプル インデックスを作成しようとしましたが、JET_INDEXCREATE2ptuplelimits メンバーに情報を渡さずに (つまり、grbitJET_bitIndexTupleLimits設定されていますが、ptuplelimits ポインターは null です)。

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

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

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

  • プライマリ インデックスに対して複数値の列を指定する。

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

JET_errIndexTuplesInvalidLimits

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

JET_errIndexTuplesNonUniqueOnly

Windows XP 以降の Windows のバージョンに適用されます。 タプル インデックスを一意にすることはできません (grbitJET_bitIndexTuplesJET_bitIndexUnique の両方を設定することはできません)。

JET_errIndexTuplesOneColumnOnly

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

JET_errIndexTuplesSecondaryIndexOnly

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

JET_errIndexTuplesTextColumnsOnly

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

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP 以降の Windows のバージョンに適用されます。 タプル インデックスでは、JET_INDEXCREATE2構造体の cbVarSegMac メンバーを設定できません。

JET_errInTransaction

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

JET_errInvalidgrbit

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

  • プライマリ インデックスに無視ビットが指定されました (JET_bitIndexPrimary は、JET_bitIndexIgnoreNullJET_bitIndexIgnoreAnyNull、または JET_bitIndexIgnoreFirstNullのいずれかで渡されました)。

  • 空のインデックスは null フィールドを無視しません (つまり、JET_INDEXCREATE2構造体の grbit メンバーはJET_bitIndexEmpty設定されていますが、JET_bitIndexIgnoreAnyNull設定されていません)。

  • 無効な grbit メンバーを使用して、JET_CONDITIONALCOLUMN構造体を渡します。 「JET_CONDITIONALCOLUMN」を参照してください。

一度に複数のインデックスを作成する場合 (つまり、 cIndexCreate パラメーターが 1 より大きい場合)、どのインデックスにも次のビットを含めなくてもかまいません。

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

無効なロケール ID (LCID) が渡されました (JET_UNICODEINDEX構造体の lcid メンバーを介して渡されました。JET_INDEXCREATE2構造体の pidxunicode メンバーに へのポインターが含まれているか、JET_INDEXCREATE2構造体の lcid メンバーを介して)。

JET_errInvalidName

無効なインデックス名が指定されました。 詳細については、「 JET_INDEXCREATE2 」を参照してください。

JET_errInvalidParameter

無効なパラメーターが API に渡されました。 このエラーが返される理由を次に示します。

  • JET_INDEXCREATE2構造体の cbKey フィールドは 0 に設定されます。

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

JET_errUnicodeTranslationFail

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

JET_errSpaceHintsInvalid

JET スペース ヒント構造の要素が正しくないか、操作不可能でした。

解説

JetCreateIndex4W 関数は、pindexcreate パラメーターで指定されたインデックスを反復処理し、最初のエラー時に中止することがあります。 JET_INDEXCREATE2構造体の err メンバーにJET_errSuccessが含まれている場合でも、エラーを含む最初のインデックスの後のインデックスは試行されていない可能性があります。

必要条件

要件

Client

Windows 8が必要です。

[サーバー]

Windows Server 2012が必要です。

Header

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

Library

ESENT.lib を使用します。

[DLL]

ESENT.dllが必要です。

関連項目

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS