DBRResultSetクラスでは,オーバライド可能な仮想関数を提供しています。この仮想関数を利用するためには,派生クラスを作成する必要があります。
ここでは,この関数仕様とその利用方法について説明します。
virtual void OnBeforeRefresh(BOOLEAN bRefesh);
virtual void OnMoveRecord(BOOLEAN bSaveAndValidate);
virtual void OnEndRecord(BOOLEAN bEndRecord);
DBRResultSetクラスで提供する仮想関数を利用する例を説明します。この仮想関数を利用するためには,派生クラスを作成する必要があります。
図2-3に示すテーブルをアクセスするCustomクラスとし,OnMoveRecordのカーソル移動では,フィールド値をメンバ変数に格納し,Updateの時には,フィールド値をチェックするものとします。
図2-3 業務で使用するテーブルの例
////////////////////////////////////////////////////////////
class Custom : public DBRResultSet
{
Public:
// Customのコンストラクタ
Custom(DBRDatabase* pDatabase) ;
// OnMoveRecord関数の定義
virtual void OnMoveRecord(BOOLEAN bSaveAndValidate);
// メンバ変数の定義
LPTSTR tokuisakiCD;
LPTSTR TELNO;
LPTSTR ZIPCD;
};
////////////////////////////////////////////////////////////
Custom::Custom(DBRDatabase* pDatabase) :
DBRResultSet(pDatabase)
{
tokuisakiCD = NULL;
TELNO = NULL;
ZIPCD = NULL;
}
////////////////////////////////////////////////////////////
void Custom::OnMoveRecord(BOOLEAN bSaveAndValidate)
{
if (bSaveAndValidate){ // レコードの更新要求か
// 更新データのチェック
if(ZIPCD[0]!='0') { // 先頭文字は0か
ZIPCD="000"; // 000を設定
}
SetField(1, tokuisakiCD);
SetField(2, TELNO);
SetField(3, ZIPCD);
} else { // いいえ
GetField(1, &tokuisakiCD);
// USERIDフィールドをtokuisakiCD変数に設定
GetField(2, &TELNO); // TELフィールドをTELNO変数に設定
GetField(3, &ZIPCD); // ZIPフィールドをZIPCD変数に設定
}
};