レコードを更新するには,検索したレコードを更新する方法(ResultSetを利用)と,UPDATE文で直接更新する方法とがあります。
データの更新が完了した後でCommitメソッドを発行してデータベースの更新情報を確定させる必要があります。
レコードを検索し更新するためには,更新目的でレコードを検索する必要があります。検索されたレコードはResultSetに1レコードだけ格納され,このレコードを更新するには,Editメソッドで更新準備を指示し,SetFieldメソッドでフィールドの内容を変更し,Updateメソッドで更新を指示します。複数のレコードを処理する場合には,Nextメソッドで次のレコードを読込み,この処理を繰り返す必要があります。
SetFieldメソッドの引数に指定したデータ型とデータベースのデータ型とが異なる場合は,データベースのデータ型に合わせて変換されます。データ型の変換規則は「7. データ型」を参照してください。
//////////////////////////////////////////////////////////////
/// SQLの実行(更新)
DBRResultSet *pRs1;
pRs1 = new DBRResultSet(pDB1); // オブジェクトの生成
// 更新目的で検索
pRs1->Execute("SELECT F1, F2 FROM TABLE1", TYPE_EXCLUSIVE);
pRs1->Open(); // レコードの検索
while(!pRs1->IsEOF())
{
// フィールド"F2"のデータを更新。uFunc()というユーザ関数を使用
pRs1->Edit();
pRs1->SetField("F2", uFunc());
pRs1->Update();
pRs1->Next(); // 次のレコードの読み込み
}
pDB1->Commit(); // 更新内容の確定
.....
UPDATE文を使ってレコードを更新できます。これは,既に更新するデータや内容が特定できる場合に,UPDATE文で直接,更新個所及び値を指定する方法です。UPDATE文を利用してデータを更新するにはDBRDatabaseクラスのExecuteDirectメソッドを使用します。
////////////////////////////////////////////////////////////
/// SQLの実行(更新) - DBRDatabaseクラスでUPDATE文を指定
pDB1->ExecuteDirect("UPDATE TABLE1 SET F1=100 WHERE F2=300");
pDB1->Commit();