CRecordset::DoFieldExchange
更新 : 2007 年 11 月
レコードセットのフィールド データ メンバとデータ ソース上の対応するレコードとの間で (双方向で) データを交換するために呼び出されます。RFX (レコード フィールド エクスチェンジ) を実装します。
virtual void DoFieldExchange(
CFieldExchange* pFX
);
パラメータ
- pFX
CFieldExchange オブジェクトへのポインタを返します。このオブジェクトは、フィールド交換操作のコンテキストを指定するために、前もってフレームワークによって設定されています。
解説
バルク行フェッチが実装されていない場合は、レコードセット オブジェクトのフィールド データ メンバとデータ ソースの現在のレコードの対応する列との間で自動的にデータを交換するために、フレームワークがこのメンバを呼び出します。また、もしパラメータ データ メンバがあれば、DoFieldExchange をレコードの選択のための SQL ステートメント文字列のパラメータ プレースホルダに連結します。
バルク行フェッチが実装されている場合は、フレームワークによって DoBulkFieldExchange が呼び出されます。バルク行フェッチを実装するには、Open メンバ関数でパラメータ dwOptions に CRecordset::useMultiRowFetch オプションを指定します。
メモ : |
---|
DoFieldExchange は、CRecordset から派生したクラスを使っている場合だけ使用できます。CRecordset から直接レコードセット オブジェクトを作成した場合は、GetFieldValue メンバ関数を呼び出してデータを取得する必要があります。 |
レコード フィールド エクスチェンジ (RFX) と呼ばれるフィールド データの交換は双方向です。レコードセット オブジェクトのフィールド データ メンバからデータ ソースのレコードのフィールドへも、データ ソースのレコードからレコードセット オブジェクトへも交換できます。
派生させたレコードセット クラスに DoFieldExchange を実装するために必要な作業は、ClassWizard を使用してクラスを作成し、フィールド データ メンバの名前とデータ型を指定することだけです。パラメータ データ メンバを指定したり動的に連結する列を扱うために、ClassWizard が記述したコードにコードを追加することもあります。詳細については、「レコードセット : データ列を動的に結び付ける方法 (ODBC)」を参照してください。
ClassWizard を使用して派生レコードセット クラスを宣言すると、次の例のような DoFieldExchange 関数のオーバーライドが記述されます。
void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
// Macros such as RFX_Text() and RFX_Int() are dependent on the
// type of the member variable, not the type of the field in the database.
// ODBC will try to automatically convert the column value to the requested type
RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
RFX_Long(pFX, _T("[BillingID]"), m_BillingID);
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("Param"), m_strParam);
}
RFX 関数の詳細については、「レコード フィールド エクスチェンジ (RFX) 関数」を参照してください。
DoFieldExchange の詳細と例については、「レコード フィールド エクスチェンジ : RFX の動作のしくみ」を参照してください。RFX の一般的な情報については、「レコード フィールド エクスチェンジ (RFX)」を参照してください。
例外
このメソッドは、CDBException* 型の例外をスローできます。
必要条件
ヘッダー : afxdb.h
参照
参照
CRecordset::DoBulkFieldExchange