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