DABroker for C++

[目次][用語][索引][前へ][次へ]

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();