IMAPITable::QueryRows

適用対象: Outlook 2013 | Outlook 2016

現在のカーソル位置から始まるテーブルから 1 つ以上の行を返します。

HRESULT QueryRows(
LONG lRowCount,
ULONG ulFlags,
LPSRowSet FAR * lppRows
);

パラメーター

lRowCount

[in]返される行の最大数。

ulFlags

[in]行の返し方を制御するフラグのビットマスク。 次のフラグを設定できます。

TBL_NOADVANCE

行の取得の結果としてカーソルが進むのを防ぎます。 TBL_NOADVANCE フラグが設定されている場合、カーソルは返された最初の行を指します。 TBL_NOADVANCE フラグが設定されていない場合、カーソルは最後に返された行の後の行を指します。

lppRows

[out]テーブル行を保持する SRowSet 構造体へのポインターへのポインター。

戻り値

S_OK

行が正常に返されました。

MAPI_E_BUSY

行取得操作の開始を妨げる別の操作が進行中です。 進行中の操作の完了を許可するか、停止する必要があります。

MAPI_E_INVALID_PARAMETER

IRowCount パラメーターは 0 に設定されます。

注釈

IMAPITable::QueryRows メソッドは、テーブルから 1 つ以上のデータ行を取得します。 IRowCount パラメーターの値は、取得の開始点に影響します。 IRowCount が正の場合、行は現在の位置から順方向に読み取られます。 IRowCount が負の場合、QueryRows は指定された行数を後方に移動して開始点をリセットします。 カーソルがリセットされると、行は順方向に読み取られます。

lppRows パラメーターが指す SRowSet 構造体の cRows メンバーは、返される行数を示します。 0 行が返された場合:

  • カーソルは既にテーブルの先頭に配置されており、 IRowCount の値は負の値です。 -または-

  • カーソルは既にテーブルの末尾に配置されており、 IRowCount の値は正です。

列の数とその順序は、各行で同じです。 行のプロパティが存在しない場合、またはプロパティの読み取り中にエラーが発生した場合、行内の プロパティの SPropValue 構造体には次の値が含まれます。

  • ulPropTag メンバーのプロパティ型のPT_ERROR。

  • Value メンバーのMAPI_E_NOT_FOUND。

lppRows パラメーターによって指される行セット内の SPropValue 構造体に使用されるメモリは、行ごとに個別に割り当てられ、解放される必要があります。 MAPIFreeBuffer を使用して、プロパティ値の構造体を解放し、行セットを解放します。 ただし、QueryRows の呼び出しで 0 が返される場合は、テーブルの先頭または末尾を示しますが、SRowSet 構造体自体のみを解放する必要があります。 SRowSet 構造体でメモリを割り当てて解放する方法の詳細については、「ADRLIST 構造体と SRowSet 構造体のメモリの管理」を参照してください。

返される行と返される順序は、IMAPITable::Restrict および IMAPITable::SortTable への呼び出しが成功したかどうかによって異なります。 ビューから行を絞り込み、QueryRows は制限で指定された条件に一致する行のみを返します。 SortTable はQueryRows によって返される行のシーケンスに影響を与える、標準の並べ替え順序または分類された並べ替え順序を確立します。 返される行は、SortTable に渡される SSortOrderSet 構造体で指定された順序になります。

各行に返される列と、返される順序は、 IMAPITable::SetColumns への呼び出しが成功したかどうかによって異なります。 SetColumns は 、テーブル内の列に含めるプロパティと、列を含める順序を指定して、列セットを確立します。 SetColumns 呼び出しが行われた場合、各行の特定の列とそれらの列の順序は、呼び出しで指定された列セットと一致します。 SetColumns 呼び出しが行われなかった場合、テーブルは既定の列セットを返します。

これらの呼び出しが行われなかった場合、 QueryRows はテーブル内のすべての行を返します。 各行には、既定の順序で設定された既定の列が含まれています。

IMAPITable::SetColumns の呼び出しで確立された列セットに、PR_NULLに設定された列が含まれている場合、lppRows で返される行セット内の SPropValue 配列には空のスロットが含まれます。

実装に関するメモ

呼び出し元がサポートされていない列を列セットに含めることを要求できます。 この場合は、プロパティ タグのプロパティ型の部分にPT_ERRORを配置し、サポートされていない列のプロパティ値にMAPI_E_NOT_FOUNDします。

行数は、要件ではなく要求として扱います。 クエリの方向に行がない場合は、0 行から要求された数まで、任意の場所を返すことができます。

分類されたテーブル ビューから行が要求されたときにユーザーに表示される行のみを返します。これにより、呼び出し元はデータのスコープに関して有効な仮定を行い、余分な作業を回避できます。

呼び出し側への注意

通常、 lRowCount パラメーターで指定した行の数だけ行が返されます。 ただし、メモリまたは実装の制限が問題である場合、または操作がテーブルの先頭または末尾に早く到達すると、 QueryRows は要求よりも少ない行を返します。

QueryRows がMAPI_E_BUSYを返す場合は、IMAPITable::WaitForCompletion メソッドを呼び出し、非同期操作が完了したら QueryRows の呼び出しを再試行します。

QueryRows を呼び出すときは、非同期通知のタイミングによって、QueryRows から返される行セットが基になるデータを正確に表さない可能性があることに注意してください。 たとえば、メッセージの削除後にフォルダーのコンテンツ テーブルに 対する QueryRows の呼び出しが、対応する通知を受け取る前に、削除された行が行セットに返されます。 ユーザーのデータビューを更新する前に、通知が届くのを常に待ちます。

テーブルから行を取得する方法の詳細については、「テーブル行 からのデータの取得」を参照してください。

MFCMAPI リファレンス

MFCMAPI のサンプル コードについては、次の表を参照してください。

ファイル 関数 コメント
ContentsTableListCtrl.cpp
DwThreadFuncLoadTable
MFCMAPI では、 IMAPITable::QueryRows メソッドを使用して、ビューに読み込むテーブル内の行を取得します。

関連項目

ADRENTRY

FreeProws

HrQueryAllRows

IMAPIProp::GetProps

IMAPITable::SetColumns

IMAPITable::WaitForCompletion

MAPIFreeBuffer

SRow

SRowSet

IMAPITable : IUnknown

[�R��h �T���v���Ƃ��� MFCMAPI