次の方法で共有


JetIndexRecordCount 関数

適用対象: Windows |Windows Server

JetIndexRecordCount 関数

JetIndexRecordCount 関数は、現在のインデックス内のエントリの数を現在の位置から前方にカウントします。 現在の位置はカウントに含まれます。 現在のインデックスが複数値の列を超え、列のインスタンスに複数の値がある場合、カウントはテーブル内のレコードの合計数より大きくすることができます。 テーブルが空の場合は、カウントに対して 0 が返されます。

    JET_ERR JET_API JetIndexRecordCount(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out         unsigned long* pcrec,
      __in          unsigned long crecMax
    );

パラメーター

sesid

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

tableid

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

pcrec

カウントを受け取る符号なし long 値へのポインター。

crecMax

カウントするレコードの最大数。 crecMax 値 0 は、カウントが無制限であることを示します。

戻り値

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

リターン コード

説明

JET_errSuccess

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

Windows XP: この戻り値は Windows XP で導入されています。

JET_errNoCurrentRecord

カーソルは現在レコード上になく、テーブルは空ではありません。

Windows XP、Windows Server 2003、Windows 2000 Server、Windows 2000 Professional: カーソルが空のインデックスまたはインデックス範囲に配置されている場合、 JetIndexRecordCount は 誤ってJET_errNoCurrentRecordを返します。

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

Windows XP: この戻り値は Windows XP で導入されています。

JET_errTermInProgress

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

この関数が成功した場合、現在の位置と crecMax までのインデックス エントリの正確な数 (0 でない場合) は 、pcrec によって指される符号なし long で返されます。

この関数が失敗した場合、 事前に割り当てられたメモリに対する変更は行われません。

解説

テーブルが空でない場合は、カウントを開始するレコードにカーソルを置く必要があります。 カウントにはこのレコードが含まれており、 crecMax で指定された制限までカウントが転送されます。 crecMax が 0 の場合、操作はインデックスの末尾までカウントを続行します。

インデックス範囲を使用して、カウントのインデックス終了に関する人為的な制限を構築できます。 このようにして、インデックスのサブ範囲を正確にカウントできます。 カーソルは、範囲内の最初の行に配置する必要があります。 範囲キーの末尾を作成し、 JetSetIndexRange を使用して、包括的または排他的に上位の範囲を設定する必要があります。 最後に、範囲を正確に数えるために JetIndexRecordCount を呼び出す必要があります。

JetIndexRecordCount は トランザクション セマンティクスに従い、現在のトランザクション状態でこの特定のセッションに対して正確な数を返します。

JetIndexRecordCount は、エントリを正確にカウントするためにインデックス リーフ ページにアクセスします。 そのため、多くの I/O を実行でき、速度が低下する可能性があります。 過剰な負荷を防ぐには 、crecMax の制限を使用する必要があります。 範囲が大きい場合は、 JetGetRecordPosition を使用して近似した方法で範囲を数えることができます。

Windows XP、Windows Server 2003、Windows 2000 Server、Windows 2000 Professional: カーソルが空のインデックスまたはインデックス範囲に配置されている場合、 JetIndexRecordCount はレコード数 0 を返すのではなく、誤ってJET_errNoCurrentRecordを返します。 この場合、アプリケーションはチェックして、インデックスまたはインデックス範囲が空かどうかを確認する必要があります。

要件

要件

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が必要です。

参照

JET_ERR
JET_SESID
JET_TABLEID
JetGetRecordPosition
JetSetIndexRange
JetStopService