次の方法で共有


JetGetCurrentIndex 関数

適用対象: Windows |Windows Server

JetGetCurrentIndex 関数

JetGetCurrentIndex 関数は、指定されたカーソルの現在のインデックスの名前を決定します。 この名前は、後で JetSetCurrentIndex を使用して現在のインデックスとしてそのインデックスを再選択するためにも使用されます。 JetGetTableIndexInfo を使用して、そのインデックスのプロパティを検出するためにも使用できます。

    JET_ERR JET_API JetGetCurrentIndex(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out         JET_PSTR szIndexName,
      __in          unsigned long cchIndexName
    );

パラメーター

sesid

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

tableid

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

szIndexName

カーソルの現在のインデックスの名前を受け取る出力バッファー。

cchIndexName

出力バッファーの最大サイズ (文字数)。

戻り値

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

リターン コード

説明

JET_errSuccess

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

同じセッションを複数のスレッドに同時に使用することはできません。 このエラーは、Windows XP 以降のリリースでのみ返されます。

JET_errTermInProgress

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

JET_wrnBufferTruncated

操作は正常に完了しましたが、出力バッファーが小さすぎてインデックス名全体を受信できませんでした。

出力バッファーには、収まるのと同じ量のインデックス名が入力されています。 出力バッファーの長さが少なくとも 1 文字の場合、その出力バッファー内の文字列は null で終了します。

メモ cchIndexName が 0 の場合、このエラーは返されません。 詳細については、「解説」セクションを参照してください。

成功すると、指定されたカーソルの現在のインデックスの名前が出力バッファーに返されます。 JET_wrnBufferTruncatedが返された場合、出力バッファーには、指定されたスペースに収まるのと同じ量のインデックス名が含まれます。 出力バッファーの長さが少なくとも 1 文字の場合、そのバッファーで返される文字列は null で終了します。 データベースの状態は変更されません。

失敗した場合、出力バッファーの状態は未定義になります。 データベースの状態は変更されません。

解説

カーソルの現在のインデックスがない場合は、空の文字列が返されます。 これは、カーソルがテーブルのクラスター化インデックス上にあり、プライマリ インデックスが定義されていない場合に発生する可能性があります。 このインデックスはテーブルのシーケンシャル インデックスと呼ばれ、定義はありません。 いずれの場合も、 JetSetCurrentIndex を使用して現在のインデックスを空の文字列に設定すると、プライマリ インデックス定義の有無に関係なく、クラスター化インデックスが選択されます。

この関数には、すべてのリリースに存在する重要なバグがあります。 出力バッファーが小さすぎてインデックス名全体を受け取れず、出力バッファーの長さが少なくとも 1 文字である場合、JET_wrnBufferTruncatedは返されません。 代わりにJET_errSuccessが返されます。 この問題を回避するには、出力バッファーの長さが常に少なくともJET_cbNameMost + 1 (65) 文字である必要があります。

要件

要件

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

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

参照

JET_ERR
JET_SESID
JET_TABLEID
JetGetTableIndexInfo
JetSetCurrentIndex