レコードの検索には,DBRResultSetクラスのコンストラクタを利用して生成するResultSetオブジェクトのメソッドを使用します。
レコードの検索は,SELECT文をExecuteメソッドで通知し,Openメソッドで検索を実行します。検索したレコードは,このResultSetオブジェクトに格納されます。
レコードの検索には検索したレコードを参照だけする参照目的とレコードの更新または削除をする更新目的の2種類があり,この目的により検索するレコード数が異なります。
また,SELECT文の組み立てでは,SELECTの一部を実行時に置き換える,?パラメタの利用も可能です。
参照を目的とした検索では,Executeメソッドの引数swTypeにTYPE_NONEを指定する必要があります。レコードの検索は,Openメソッドを呼び出すことにより実行され,検索したレコードがResultSetに読込まれます。ResultSetに読込むレコード数は,SetMaxRowsメソッドで設定します。
検索条件に一致したレコードすべてを処理する場合はNextメソッドでカーソルを移動します。この場合,SetMaxRowsメソッドで設定したレコード数を越えてNextメソッドが要求されると,次のレコードが自動的にResultSetに読込まれます。
参照専用のResultSetに検索結果を読込む例を示します。
//////////////////////////////////////////////////////////////
/// SQLの実行(検索)
DBRResultSet *pRs1;
pRs1 = new DBRResultSet(pDB1); // オブジェクトの生成
pRs1->SetMaxRows(10); // レコード数
pRs1->Execute("SELECT F1, F2 FROM TABLE1", // SELECT文の設定
TYPE_NONE); // 参照目的
pRs1->Open(); // レコードの検索
while(!pRs1->IsEOF())
{
.....
pRs1->Next();
}
更新を目的とした検索では,Executeメソッドの引数swTypeにTYPE_EXCLUSIVEを指定する必要があります。この場合,ResultSetには1レコードだけが読込まれます。
TYPE_EXCLUSIVEを指定した場合は,検索時のSELECT文でFOR UPDATEオプションは指定する必要はありません。
SELECT文の一部を実行時に置き換える?パラメタを利用する場合,Executeメソッドの引数で?パラメタ付きのSELECT文とします。?パラメタの値は,SetParamメソッドで指定します。レコードの検索は,Openメソッドを呼び出すことにより実行され,検索したレコードがResultSetに読込まれます。
?パラメタを使用した例を示します。
//////////////////////////////////////////////////////////////
/// ?パラメタを使用した検索
DBRResultSet *pRs1;
pRs1 = new DBRResultSet(pDB1); // オブジェクトの生成
pRs1->Execute("SELECT F1, F2 FROM TABLE1 ID > ? AND ID < ?",
TYPE_NONE);
pRs1->SetParam(1,100); // 1番目の?パラメタに対する値の設定
pRs1->SetParam(2,300); // 2番目の?パラメタに対する値の設定
pRs1->Open(); // レコードの検索