CFieldExchange 类

支持数据库类使用的记录字段交换 (RFX) 和批量记录字段交换 (Bulk RFX) 例程。

语法

class CFieldExchange

成员

公共方法

名称 描述
CFieldExchange::IsFieldType 如果当前操作适用于正更新的字段类型,则返回非零值。
CFieldExchange::SetFieldType 指定记录集数据成员(列或参数)的类型,这些成员由对 RFX 函数的所有后续调用表示,直到对 SetFieldType 的下一次调用为止。

备注

CFieldExchange 没有基类。

如果要为自定义数据类型编写数据交换例程或者在实现批量提取行时,请使用此类;否则,不会直接使用此类。 RFX 和批量 RFX 在记录集对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。

注意

如果使用数据访问对象 (DAO) 类而不是开放式数据库连接 (ODBC) 类,请改用 CDaoFieldExchange 类。 有关详细信息,请参阅概述:数据库编程一文。

CFieldExchange 对象提供发生记录字段交换或批量记录字段交换所需的上下文信息。 CFieldExchange 对象支持许多操作,包括绑定参数和字段数据成员以及在当前记录的字段上设置各种标志。 RFX 和批量 RFX 操作是在类型(由 CFieldExchange 中的 enum FieldType 定义)的记录集类数据成员上执行的。 可能的 FieldType 值包括

  • CFieldExchange::outputColumn:用于字段数据成员。

  • CFieldExchange::inputParamCFieldExchange::param:用于输入参数数据成员。

  • CFieldExchange::outputParam:用于输出参数数据成员。

  • CFieldExchange::inoutParam:用于输入/输出参数数据成员。

该类的大多数成员函数和数据成员都是为编写自己的自定义 RFX 例程而提供的。 你将经常使用 SetFieldType。 有关详细信息,请参阅文章记录字段交换 (RFX)记录集 (ODBC)。 有关批量行提取的信息,请参阅记录集:批量提取记录 (ODBC) 一文。 有关 RFX 和批量 RFX 全局函数的详细信息,请参阅本参考的 MFC 宏和全局部分中的记录字段交换函数

继承层次结构

CFieldExchange

要求

标头:afxdb.h

CFieldExchange::IsFieldType

如果编写自己的 RFX 函数,请在函数的开头部分调用 IsFieldType 以确定是否可以对特定字段或参数数据成员类型(CFieldExchange::outputColumnCFieldExchange::inputParamCFieldExchange::paramCFieldExchange::outputParamCFieldExchange::inoutParam)执行当前操作。

BOOL IsFieldType(UINT* pnField);

参数

pnField
在此参数中返回字段或参数数据成员的序列号。 此数字对应于数据成员在 CRecordset::DoFieldExchangeCRecordset::DoBulkFieldExchange 函数中的顺序。

返回值

如果可以对当前字段或参数类型执行当前操作,则返回非零值。

备注

遵循现有 RFX 函数的模型。

CFieldExchange::SetFieldType

需要在记录集类的 DoFieldExchangeDoBulkFieldExchange 重写中调用 SetFieldType

void SetFieldType(UINT nFieldType);

参数

nFieldType
CFieldExchange 中声明的 enum FieldType 的值,可以是以下值之一:

  • CFieldExchange::outputColumn

  • CFieldExchange::inputParam

  • CFieldExchange::param

  • CFieldExchange::outputParam

  • CFieldExchange::inoutParam

备注

对于字段数据成员,必须使用参数 CFieldExchange::outputColumn 调用 SetFieldType,然后调用 RFX 或批量 RFX 函数。 如果尚未实现批量行提取,则 ClassWizard 会将此 SetFieldType 调用放置在 DoFieldExchange 的字段映射部分中。

如果对记录集类进行参数化,则必须在任何字段映射部分之外再次调用 SetFieldType,然后对所有参数数据成员进行 RFX 调用。 每种类型的参数数据成员都必须具有自己的 SetFieldType 调用。 下表区分了可传递给 SetFieldType 以表示类的参数数据成员的不同值:

SetFieldType 参数值 参数数据成员的类型
CFieldExchange::inputParam 输入参数。 一个传递到记录集的查询或存储过程的值。
CFieldExchange::param CFieldExchange::inputParam 相同。
CFieldExchange::outputParam 输出参数。 记录集的存储过程的返回值。
CFieldExchange::inoutParam 输入/输出参数。 传递到记录集的存储过程并从其中返回的值。

通常,与字段数据成员或参数数据成员关联的每组 RFX 函数调用之前都必须调用 SetFieldType。 每个 SetFieldType 调用的 nFieldType 参数标识由 SetFieldType 调用之后的 RFX 函数调用表示的数据成员的类型

有关处理输出和输入/输出参数的详细信息,请参阅 CRecordset 成员函数 FlushResultSet。 有关 RFX 和批量 RFX 函数的详细信息,请参阅主题记录字段交换函数。 有关批量获取行的相关信息,请参阅记录集:批量获取记录 (ODBC) 一文。

示例

此示例显示对 RFX 函数的多次调用以及对 SetFieldType 的调用。 请注意,通过指向 CFieldExchange 对象的 pFX 指针调用 SetFieldType

void CSections::DoFieldExchange(CFieldExchange *pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Text(pFX, _T("[CourseID]"), m_CourseID);
   RFX_Text(pFX, _T("[InstructorID]"), m_InstructorID);
   RFX_Text(pFX, _T("[RoomNo]"), m_RoomNo);
   RFX_Text(pFX, _T("[Schedule]"), m_Schedule);

   // output parameter
   pFX->SetFieldType(CFieldExchange::outputParam);
   RFX_Long(pFX, _T("Instructor_Count"), m_nCountParam);

   // input parameter
   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Department_Name"), m_strNameParam);
}

另请参阅

层次结构图
CRecordset 类