次の方法で共有


JetSetCurrentIndex3 関数

適用対象: Windows |Windows Server

JetSetCurrentIndex3 関数

JetSetCurrentIndex3 関数は、カーソルの現在のインデックスを設定するために使用されます。 カーソルの現在のインデックスは、テーブル内のどのレコードをそのカーソルに表示するかを定義し、それらのレコードを公開するために使用するインデックス エントリのセットを選択して表示順序を定義します。

    JET_ERR JET_API JetSetCurrentIndex3(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in_opt      JET_PCSTR szIndexName,
      __in          JET_GRBIT grbit,
      __in          unsigned long itagSequence
    );

パラメーター

sesid

この呼び出しに使用するセッション。

tableid

この呼び出しに使用するカーソル。

szIndexName

カーソルに対して選択するインデックスの名前。

このパラメーターが NULL または空の文字列の場合は、クラスター化インデックスが選択されます。 テーブルに対してプライマリ インデックスが定義されている場合、クラスター化インデックスと同じであるため、そのインデックスが選択されます。 テーブルにプライマリ インデックスが定義されていない場合は、シーケンシャル インデックスが選択されます。 シーケンシャル インデックスにはインデックス定義がありません。 詳細については、「 JetCreateIndex 」を参照してください。

pindexid が NULL でない場合、インデックス名は無視され、インデックス ID によってインデックスが選択されます。

grbit

この呼び出しに使用するオプションを含むビットのグループ。これには、次の 0 個以上が含まれます。

説明

JET_bitMoveFirst

このオプションは、指定したインデックスの最初のエントリにカーソルを置く必要があることを示します。 クラスター化インデックス (プライマリ インデックスまたはシーケンシャル インデックス) が選択されていて、現在のインデックスがセカンダリ インデックスである場合は、JET_bitMoveFirstが想定されます。 現在のインデックスが選択されている場合、このオプションは無視され、カーソル位置は変更されません。

JET_bitNoMove

このオプションは、古いインデックス上のカーソルの現在位置にあるインデックス エントリに関連付けられているレコードに対応する新しいインデックスのインデックス エントリにカーソルを置く必要があることを示します。

新しいインデックスの定義に少なくとも 1 つの複数値キー列が含まれている場合、変換先のインデックス エントリはあいまいです。 この場合、指定した itagSequence を使用して、カーソルを配置するために最も重要な複数値キー列の複数値を選択します。 複数の複数値キー列の場合でも、1 つの itagSequence を渡す必要があるのは、エンジンが最も重要な複数値のキー列のすべての値のみを展開するためです。 詳細については、「 JetCreateIndex 」を参照してください。

JET_bitMoveFirstが指定されている場合、このオプションは無視されます。

現在のインデックスが選択されている場合、このオプションは無視され、カーソル位置は変更されません。 このパラメーターが存在しない場合、その値はJET_bitMoveFirstと見なされます。

itagSequence

新しいインデックスにカーソルを置くために使用される複数値の列値のシーケンス番号。

このパラメーターは、JET_bitNoMoveと組み合わせてのみ使用されます。 詳細については、このオプションの説明を参照してください。

このパラメーターが存在しない場合、または 0 に設定されている場合、その値は 1 と見なされます。

戻り値

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

リターン コード

説明

JET_errSuccess

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

JET_errBadItagSequence

JET_bitNoMove オプションを使用してセカンダリ インデックスが選択されており、指定したシーケンス番号に対応する新しいインデックスの定義の最初の複数値キー列の値はありません。

JET_errClientRequestToStopJetService

JetStopService の呼び出しの結果、セッションに関連付けられたインスタンス上のすべてのアクティビティが停止したため、操作を完了することはできません。

JET_errInstanceUnavailable

セッションに関連付けられているインスタンスで致命的なエラーが発生したため、操作を完了できません。このエラーでは、そのデータの整合性を保護するためにすべてのデータへのアクセスを取り消す必要があります。

このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errInvalidIndexId

インデックス ID の内容が無効であるか、有効期限が切れているので、更新する必要があります。 これは、次の場合に JetSetCurrentIndex3 で発生する可能性があります。

  • pindexid-cbStruct> は、予想されるサイズではありません (Windows Server 2003 以降のリリース)。

  • インデックス ID がフェッチされてから、エンジンはシャットダウンされています。

  • インデックス ID に対応するインデックスを含むテーブルを参照しているすべてのカーソルが閉じられ、エンジンによってそのインデックスの定義がスキーマ キャッシュから削除されました。

  • インデックス ID は、間違ったテーブルでカーソルを開いた状態で使用されています。

  • インデックスが削除されたか、セッションにまだ表示されていません。

JET_errInvalidName

指定されたオブジェクト名の 1 つが無効です。 すべてのオブジェクト名は、同じ規則セットに準拠している必要があります。 これらのルールを以下に示します。

  • オブジェクト名は ASCII 文字で構成する必要があります。

  • オブジェクト名の長さは少なくとも 1 文字にする必要があります。

  • オブジェクト名の長さはJET_cbNameMost (64) 文字を超えることはできません。

  • オブジェクト名はスペースで始まる場合があります。

  • オブジェクト名には、ASCII 制御文字 (0x00 ~ 0x1F) を含めないようにしてください。

  • オブジェクト名に感嘆符 (!)、ピリオド (.)、左角かっこ ([)、または右角かっこ (]) 文字を含めないようにしてください。

  • 検証が完了すると、最初のスペース (存在する場合) までの文字列の部分のみがオブジェクト名に使用されます。 つまり、オブジェクト名にスペースも含まれていない可能性があります。

JET_errInvalidParameter

指定されたパラメーターの 1 つに、予期しない値が含まれていたか、別のパラメーターの値と組み合わせると意味のない値が含まれていました。 これは、pindexid が NULL ではなく、pindexid-cbStruct> が予想サイズ (Windows XP 以前のリリース) ではない場合に、JetSetCurrentIndex3 で発生する可能性があります。

JET_errNoCurrentRecord

JET_bitNoMove オプションを使用してセカンダリ インデックスが選択されており、新しいインデックスには、古いインデックス上のカーソルの現在位置にあるインデックス エントリに関連付けられているレコードに対応するインデックス エントリがありません。

JET_errNotInitialized

セッションに関連付けられているインスタンスがまだ初期化されていないため、操作を完了できません。

JET_errOutOfCursors

エンジンは、カーソルを開くために使用されるリソースのプールを使い果たしました。 一度に開くことができるカーソルの最大数は、 JET_paramMaxCursorsを使用して制御されます。 詳細については 、「JetSetSystemParameter 」を参照してください。 これは、セカンダリ インデックスが選択されていて、エンジンがそのインデックスを使用する内部カーソルを開くことができない場合に 、JetSetCurrentIndex3 で発生する可能性があります。

JET_errRestoreInProgress

セッションに関連付けられているインスタンスで復元操作が進行中であるため、操作を完了できません。

JET_errSessionSharingViolation

同じセッションを複数のスレッドに同時に使用することはできません。

このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errTermInProgress

セッションに関連付けられているインスタンスがシャットダウンされているため、操作を完了できません。

成功すると、カーソルの現在のインデックスが要求されたインデックスに設定されます。 要求されたインデックスのインデックス定義に従って 、JetSeek を使用してインデックス エントリを検索できるようになりました。 インデックス エントリは、 JetMove を使用して、そのインデックス定義で指定された順序で列挙することもできます。 カーソルの現在位置は、インデックスの最初のインデックス エントリ (JET_bitMoveFirst) または古いインデックス (JET_bitNoMove) 上のカーソルの現在位置に関連する特定のインデックス エントリに設定されます。 データベースの状態は変更されません。

失敗した場合、カーソルの現在のインデックスと現在の位置は未定義の状態になります。 データベースの状態は変更されません。

解説

インデックス ID ヒントが古い場合、API は単に失敗します。 この場合、インデックスのテキスト名へのフォールバックはありません。 このフォールバックは、API の呼び出し元が手動で行う必要があります。

必要条件

要件

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

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

参照

JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXID
JetCreateIndex
JetGetCurrentIndex
JetGetIndexInfo
JetGetTableIndexInfo
JetMove
JetSetSystemParameter
JetSeek