CFieldExchange 类
支持数据库类使用的记录字段交换 (RFX) 和批量记录字段交换 (Bulk RFX) 例程。
语法
class CFieldExchange
成员
公共方法
名称 | 描述 |
---|---|
CFieldExchange::IsFieldType | 如果当前操作适用于正更新的字段类型,则返回非零值。 |
CFieldExchange::SetFieldType | 指定记录集数据成员(列或参数)的类型,这些成员由对 RFX 函数的所有后续调用表示,直到对 SetFieldType 的下一次调用为止。 |
备注
CFieldExchange
没有基类。
如果要为自定义数据类型编写数据交换例程或者在实现批量提取行时,请使用此类;否则,不会直接使用此类。 RFX 和批量 RFX 在记录集对象的字段数据成员和数据源上当前记录的相应字段之间交换数据。
注意
如果使用数据访问对象 (DAO) 类而不是开放式数据库连接 (ODBC) 类,请改用 CDaoFieldExchange 类。 有关详细信息,请参阅概述:数据库编程一文。
CFieldExchange
对象提供发生记录字段交换或批量记录字段交换所需的上下文信息。 CFieldExchange
对象支持许多操作,包括绑定参数和字段数据成员以及在当前记录的字段上设置各种标志。 RFX 和批量 RFX 操作针对 FieldType 中CFieldExchange
定义的enum
类型的记录集类数据成员执行。 可能的 FieldType 值包括:
CFieldExchange::outputColumn
:用于字段数据成员。CFieldExchange::inputParam
或CFieldExchange::param
:用于输入参数数据成员。CFieldExchange::outputParam
:用于输出参数数据成员。CFieldExchange::inoutParam
:用于输入/输出参数数据成员。
该类的大多数成员函数和数据成员都是为编写自己的自定义 RFX 例程而提供的。 你将经常使用 SetFieldType
。 有关详细信息,请参阅文章记录字段交换 (RFX) 和记录集 (ODBC)。 有关批量行提取的信息,请参阅记录集:批量提取记录 (ODBC) 一文。 有关 RFX 和批量 RFX 全局函数的详细信息,请参阅本参考的 MFC 宏和全局部分中的记录字段交换函数。
继承层次结构
CFieldExchange
要求
标头:afxdb.h
CFieldExchange::IsFieldType
如果编写自己的 RFX 函数,请在函数的开头部分调用 IsFieldType
以确定是否可以对特定字段或参数数据成员类型(CFieldExchange::outputColumn
、CFieldExchange::inputParam
、CFieldExchange::param
、 CFieldExchange::outputParam
或 CFieldExchange::inoutParam
)执行当前操作。
BOOL IsFieldType(UINT* pnField);
参数
pnField
在此参数中返回字段或参数数据成员的序列号。 此数字对应于数据成员在 CRecordset::DoFieldExchange 或 CRecordset::DoBulkFieldExchange 函数中的顺序。
返回值
如果可以对当前字段或参数类型执行当前操作,则返回非零值。
备注
遵循现有 RFX 函数的模型。
CFieldExchange::SetFieldType
需要在记录集类的 DoFieldExchange 或 DoBulkFieldExchange 重写中调用 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);
}