2.5.4 レコードの削除

レコードの削除方法には,検索したレコードを削除する方法(ResultSetを利用)と,DELETE文で直接削除する方法があります。

レコードの削除が完了した後でCommitメソッドを発行してデータベースの更新情報を確定させる必要があります。

<この項の構成>
(1) 検索したレコードの削除
(2) DELETE文を利用した削除

(1) 検索したレコードの削除

レコードを検索し削除するためには,更新目的でレコードを検索する必要があります。検索されたレコードはResultSetに1レコードだけ格納され,このレコードを削除するには,Editメソッドで削除準備を指示し,Deleteメソッドで更新を指示します。複数のレコードを処理する場合には,Nextメソッドで次のレコードを読込み,この処理を繰り返す必要があります。

////////////////////////////////////////////////////////////
/// SQLの実行(削除)
 DBRResultSet *pRs1(pDB1);      // オブジェクトの生成

  // 更新目的で検索
  pRs1->Execute("SELECT F1,F2 FROM TABLE1", TYPE_EXCLUSIVE);
     
  pRs1->Open();                 // レコードの検索
  while(!pRs1->IsEOF())  
  {
     pRs1->Delete();            // 削除のためのDeleteメソッドの呼び出し
     pRs1->Next();      // Nextメソッドにより次のレコードの読み込み
  }
  pDB1->Commit();               // トランザクションのコミット
   .....

注意事項
接続するDBMSがSQL Serverの場合,CloseメソッドでResultSetを削除してからCommitメソッドを呼出してください。Closeメソッドを呼ばないと排他ロックが解除されません。

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

DELETE文を使ってレコードを削除できます。これは,既に削除するレコードが特定できる場合に,DELETE文で削除するレコードを指定する方法です。DELETE文を利用してレコードを削除するにはDBRDatabaseクラスのExecuteDirectメソッドを使用します。

//////////////////////////////////////////////////////////////
/// SQLの実行(削除)
    pDB1->ExecuteDirect("DELETE FROM TABLE1 WHERE F1=100");
    pDB1->Commit();