データを削除するには,ResultSetを利用する方法と,SQLのDELETE文を利用する方法とがあります。
ResultSetに検索されたレコードを削除するためには,カーソルをレコードに位置づけ,Editメソッドで削除準備を指示し,Deleteメソッドで削除を指示します。複数のレコードを削除する場合には,この処理を繰り返す必要があります。
//////////////////////////////////////////////////////////////
/// SQLの実行(削除)
DBStatement* pStatement;
DBResultSet* pResultSet;
// SQL文実行のため,DBStatementクラスの生成
pStatement = pConnect->CreateStatement();
// 更新可能なDBResultSetオブジェクトを生成するため,
// DBStatementオブジェクトでTYPE_EXCLUSIVEを設定
// このオプションはデフォルト値なので省略可
pStatement->SetResultSetType(TYPE_EXCLUSIVE);
// SELECT文を指定し,SQL文の解析
// ここでは,SELECT文に"FOR UPDATE"不要
// このオプションは自動的に付加される。
pStatement->Execute("SELECT F1,F2 FROM TABLE1");
// DBResultSetを生成し,検索結果を取得
// 削除できるレコードは1レコードだけ
pResultSet = pStatement->GetResultSet();
while(!pResultSet->IsEOF()) // すべてのレコードの読み込み
{
// 削除のためのDeleteメソッドの呼び出し
pResultSet->Delete();
pResultSet->Next();
// Nextメソッドにより次のレコードの読み込み
}
// その他の処理
.....
SQL文のDELETE文を使って,データを削除できます。次に,DBStatementクラス及びDBConnectionクラスを使用して,?パラメタを使用しない更新をする場合と,DBPreparedStatementクラスを使用して,?パラメタを使用した更新をする場合の三通りについて説明します。
DBConnectionクラスのCreateStatementメソッドでDBStatementオブジェクトを生成します。生成されたDBStatementクラスのExecuteメソッドでSQL文を実行してデータを削除します。
//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBStatementクラスでDELETE文を指定
// DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
// SQL文の実行
pStatement->Execute("DELETE FROM TABLE1 WHERE F1=100");
DBConnectionクラスのExecuteDirectメソッドでSQL文を実行してデータを削除します。
この方法は手順が簡単ですが,データをいったん検索してから削除したい場合は,DBStatementクラスを使用してください。DBConnectionクラスでは検索結果を受け取ることができないため,検索ができません。
//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBConnectionクラスでDELETE文を指定
// SQL文の実行
pConnect->ExecuteDirect("DELETE FROM TABLE1 WHERE F1=100");
?パラメタを記述したDELETE文を指定して,DBConnectionクラスのCreatePreparedStatementメソッドを呼び出し,DBPreparedStatementオブジェクトを生成します。次に,ExecuteメソッドでSQL文をデータベースに通知(解析)し,SetParamメソッドで?パラメタのデータを設定します。そして,ExecuteUpdateメソッドで削除を実行します。
////////////////////////////////////////////////////////////
/// SQLの実行(削除)
/// - DBPreparedStatementクラスで?パラメタのあるDELETE文を指定
// DBPreparedStatementオブジェクトの生成
pStatement = pConnect->CreatePreparedStatement(
"DELETE FROM TABLE1 WHERE F1 < ? AND F2 < ?");
// SQL文の解析
pStatement->Execute();
// ?パラメタへの値の設定
pStatement->SetParam(1,100);
pStatement->SetParam(2,300);
// 削除の実行
pStatement->ExecuteUpdate();