ここでは,ResultSetに読込まれたレコードを参照する方法について説明します。参照目的で検索したレコードをアクセスする時には,カーソルを制御してカレントレコードを決定する必要がありますが,更新目的で検索した場合には,1レコードだけが読込まれますのでカーソルの制御は不要です。
カーソルの移動には,次のメソッドを利用します。
ResultSetには,SetMaxRowsメソッドで設定したレコード数だけが格納され,これより多くのレコードが検索されている場合は,NextメソッドやPageNextメソッドを呼び出し,次のレコードをResultSetに読込むことが必要です。
レコードを先頭から順に参照する場合には,Nextメソッドだけを利用することにより,次のレコードが自動的にResultSetに読込まれます。
ResultSetに読込まれたレコードのカーソルを自由に移動するようなケースでは,次のレコードをResultSetに読込むために,一度Bottomメソッドで最後のレコードに位置付け,Nextで読込む方法もありますが,PageNextメソッドを使用することにより,カーソルの位置を意識せず,次のレコードをResultSetに読込むことができます。
カーソルの移動は,ResultSetに格納されたレコードだけに対して有効であり,前に読込まれたレコードに位置づけることはできません。
カーソルがResultSetのレコードの範囲を越えて指定された場合には,エラーがスローされます。アプリケーションでは,カーソルを移動する前後でIsEOFメソッドの戻り値を確認することでResultSetの範囲を確認できます。
ResultSetのレコードのフィールド値は,DBRResultSetクラスのGetFieldメソッドを使って参照します。データベースのデータ型とGetFieldメソッドの引数に指定したデータ型とが異なる場合は,引数のデータ型に合わせて変換されます。データ型の変換規則については,「7. データ型」を参照してください。
//////////////////////////////////////////////////////////////
// 値の参照の例
LPTSTR pField;
INT32 nField;
//データベースのデータの検索処理
:
// 検索結果をResultSetに取得
// レコードの読み込み
while(!pRs1->IsEOF())
{
// フィールドのデータの文字列変換と「ポインタ」の受け取り
pRs1->GetField(1, &nField);
cout << " Data=" << nField;
pRs1->GetField(2, &pField);
cout << " Data=" << pField;
cout << endl;
// 次のレコードの読み込み
pRs1->Next();
}