ResultSetを利用した繰り返し列の要素を更新する方法について説明します。
簡易版クラスを使用している場合,DBRDatabaseオブジェクトのGetArrayDataFactoryメソッドでDBRDatabaseオブジェクトごとにDBRArrayDataFactoryオブジェクトを生成します。詳細版クラスを使用している場合は,DBConnectionオブジェクトのGetArrayDataFactoryメソッドでDBConnectionオブジェクトごとに生成します。
(例)社員表テーブルの資格フィールドを検索して,要素の値がDatabaseであればDSPに変更する例です。
/////////////////////////////////////////////////////////////
/// SQLの実行(要素の更新)- 検索したレコードを更新
DBRDatabase *pDB1;
DBRResultSet *pResultSet;
DBRArrayDataFactory *pFactory = NULL;
DBRArrayDataPtr pArray2;
DBRArrayDataConstPtr pArray1;
int nArray;
LPTSTR youso;
:
:
// DBRArrayDataFactoryオブジェクトの生成
pFactory = pDB1->GetArrayDataFactory();
pResultSet = new DBRResultSet(pDB1);
// ResultSetオブジェクトの生成
// レコードの検索
pResultSet-> Execute("SELECT 資格 from 社員表",TYPE_EXCLUSIVE);
pResultSet->Open(); // ResultSetへの読込み
if(pResultSet->GetArraySize(1) > 0) // 繰り返し列かどうかの判定
{
while(!pResultSet->IsEOF()) // 検索結果の終わりの判定
{
// 繰り返し列の要素を参照用DBRArrayDataオブジェクトに読み出す
pResultSet->GetField(1,&pArray1);
// 参照用のDBRArrayDataオブジェクトをコピーして
// 更新用のDBRArrayDataオブジェクトを生成
pArray2=pFactory->CreateArrayData(pArray1);
// 繰り返し列の要素数分処理
for (nArray=1;nArray<=pArray1->GetArrayCount();nArray++)
{
// 要素を読み出し,Nullかどうかを判定
if(pArray1->GetData(nArray,&youso))
{ // Nullでない場合の処理
if(strcomp(youso,"Database")==0) // 要素の値を確認
pArray2->SetData(nArray,"DSP"); // 要素の値をDSPに更新
}
}
pResultSet->Edit(); // レコードの更新準備
// 更新用DBRArrayオブジェクトの繰り返し列をResultSetに反映する
pResultSet->SetField(1,pArray2);
pResultSet->Update(); // データベースを更新
// Updateメソッド終了後更新用のDBRArrayDataオブジェクトを削除
delete pArray2;
pResultSet->Next(); // カレントレコードを更新
}
}
else // 繰り返し列でなければ
cout << "Not Array Field"; // Not Array Fieldを表示
pDB1->Commit(); // データベースの更新をコミット
:
次の順序で繰り返し列に設定する要素の値を準備します。
DBRArrayDataFactoryオブジェクトのCreatArrayDataメソッドに繰り返し列の型を指定しDBRArrayDataオブジェクトを生成します。次にDBRArrayDataオブジェクトのCreateメソッドで要素数分の領域を確保します。 DBRArrayDataオブジェクトにはSetDataメソッドで要素の値を設定します。 DBRArrayDataオブジェクトの値はSetFieldメソッドでResultSetに反映します。
(例) 社員表テーブルの資格フィールドに要素1syu,Database,Networkを新規に追加する例
//////////////////////////////////////////////////////////////
DBRDatabase *pDB1;
DBRResultSet *pResultSet;
DBRArrayDataFactory *pFactory = NULL;
DBRArrayDataPtr pArray1;
:
:
// DBRArrayDataFactoryオブジェクトの生成
pFactory = pDB1->GetArrayDataFactory();
// DBRArrayDataオブジェクトの生成
pArray1 = pFactory->CreateArrayData(COL_TYPE_CHAR,10);
pArray1->Create(3); // 3要素分の領域を確保
pArray1->SetData(1,"1syu"); // 1番目の要素に1syuを設定
pArray1->SetData(2,"Database"); // 2番目の要素にDatabaseを設定
pArray1->SetData(3,"Network"); // 3番目の要素にNetworkを設定
:
pResultSet = new DBRResultSet(pDB1);
// ResultSetオブジェクトの生成
// 氏名IDがZ004のレコードを検索
pResultSet-> Execute("SELECT 資格 from 社員表
where 氏名ID='Z004'",TYPE_EXCLUSIVE);
pResultSet->Open(); // レコードをResultSetに読込む
pResultSet->Edit(); // レコードの更新準備
// DBRArrayオブジェクトの繰り返し列をResultSetに反映
pResultSet->SetField(1,pArray1);
pResultSet->Update(); // データベースを更新
pDB1->Commit(); // データベースの更新をコミット
: