2.6.4 レコードの削除

データを削除するには,ResultSetを利用する方法と,SQLのDELETE文を利用する方法とがあります。

<この項の構成>
(1) ResultSetを利用した削除
(2) DELETE文を利用した削除

(1) ResultSetを利用した削除

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メソッドにより次のレコードの読み込み
  }
     // その他の処理
.....

(2) DELETE文を利用した削除

SQL文のDELETE文を使って,データを削除できます。次に,DBStatementクラス及びDBConnectionクラスを使用して,?パラメタを使用しない更新をする場合と,DBPreparedStatementクラスを使用して,?パラメタを使用した更新をする場合の三通りについて説明します。

(a) DBStatementクラスを使用した場合

DBConnectionクラスのCreateStatementメソッドでDBStatementオブジェクトを生成します。生成されたDBStatementクラスのExecuteメソッドでSQL文を実行してデータを削除します。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBStatementクラスでDELETE文を指定

  // DBStatementオブジェクトの生成
pStatement = pConnect->CreateStatement();
  // SQL文の実行
pStatement->Execute("DELETE FROM TABLE1 WHERE F1=100");

(b) DBConnectionクラスを使用した場合

DBConnectionクラスのExecuteDirectメソッドでSQL文を実行してデータを削除します。

この方法は手順が簡単ですが,データをいったん検索してから削除したい場合は,DBStatementクラスを使用してください。DBConnectionクラスでは検索結果を受け取ることができないため,検索ができません。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除) - DBConnectionクラスでDELETE文を指定

  // SQL文の実行
pConnect->ExecuteDirect("DELETE FROM TABLE1 WHERE F1=100");

(c) DBPreparedStatementクラスを使用した場合

?パラメタを記述した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();