CRecordset::DoFieldExchange

调用交换数据(在两个方向)在记录集的字段数据成员和数据源中的相应的记录之间。 实现记录字段交换(rfx)。

virtual void DoFieldExchange( 
   CFieldExchange* pFX  
);

参数

  • pFX
    指向 CFieldExchange 对象的指针。 框架已将设置此对象用于字段交换操作指定上下文。

备注

当批量取行未实现时,框架调用该成员函数的自动交换在记录集对象的字段数据成员和当前记录之间的相应列的数据在数据源中。 DoFieldExchange 还将自己的参数数据成员,如果有,在SQL语句字符串中的参数占位符记录集选择的。

如果已实现批量取行,框架调用 DoBulkFieldExchange。 若要实现批量取行,则在 打开 成员函数必须指定 dwOptions 参数的 CRecordset::useMultiRowFetch 选项。

备注

才可以使用从 CRecordset,派生的选件类DoFieldExchange 可用。如果您创建了一个记录集对象直接从 CRecordset,必须调用 GetFieldValue 成员函数检索数据。

字段数据交换,调用记录字段交换(rfx),在两个方向工作:记录中的字段的记录集对象的字段数据成员数据源中的和从数据源中的记录到记录集对象。

您常常需要采用实现自己的派生记录集选件类的 DoFieldExchange 的唯一操作是使用类向导创建选件类和指定字段数据成员的名称和数据类型。 您可能还将添加代码来指定参数数据成员或相关的哪些类向导编写所有列(如动态绑定。 有关更多信息,请参见文章 记录集:动态绑定数据列(odbc)

在声明您的类向导的派生记录集选件类,向导编写 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函数的更多信息,请参见主题 记录字段交换函数

有关进一步的示例和详细信息 DoFieldExchange,请参见文章 记录字段交换:RFX的工作机制。 有关RFX的一般信息,请参见文章 记录字段交换

异常

此方法会引发类型 **CDBException***的异常。

要求

Header: afxdb.h

请参见

参考

CRecordset选件类

层次结构图

CRecordset::m_nFields

CRecordset::m_nParams

CRecordset::DoBulkFieldExchange

CRecordset::GetFieldValue

CFieldExchange选件类

其他资源

记录字段交换函数