CRecordset::DoFieldExchange

更新 : 2007 年 11 月

レコードセットのフィールド データ メンバとデータ ソース上の対応するレコードとの間で (双方向で) データを交換するために呼び出されます。RFX (レコード フィールド エクスチェンジ) を実装します。

virtual void DoFieldExchange( 
   CFieldExchange* pFX  
);

パラメータ

  • pFX
    CFieldExchange オブジェクトへのポインタを返します。このオブジェクトは、フィールド交換操作のコンテキストを指定するために、前もってフレームワークによって設定されています。

解説

バルク行フェッチが実装されていない場合は、レコードセット オブジェクトのフィールド データ メンバとデータ ソースの現在のレコードの対応する列との間で自動的にデータを交換するために、フレームワークがこのメンバを呼び出します。また、もしパラメータ データ メンバがあれば、DoFieldExchange をレコードの選択のための SQL ステートメント文字列のパラメータ プレースホルダに連結します。

バルク行フェッチが実装されている場合は、フレームワークによって DoBulkFieldExchange が呼び出されます。バルク行フェッチを実装するには、Open メンバ関数でパラメータ dwOptions に CRecordset::useMultiRowFetch オプションを指定します。

h410y82c.alert_note(ja-jp,VS.90).gifメモ :

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 クラス

階層図

CRecordset::m_nFields

CRecordset::m_nParams

CRecordset::DoBulkFieldExchange

CRecordset::GetFieldValue

CFieldExchange クラス

その他の技術情報

CRecordset のメンバ

レコード フィールド エクスチェンジ (RFX) 関数