记录字段交换函数

本主题列出了记录字段交换(RFX、 Bulk RFX和 DFX)函数,这些函数用于在记录集对象与其数据源之间自动传输数据以及对数据执行其他操作。

如果正在使用基于 ODBC 的类,并且已实现批量行提取,则必须为与数据源列对应的每个数据成员调用批量 RFX 函数,以便手动重写 DoBulkFieldExchangeCRecordset 成员函数。

如果尚未在基于 ODBC 的类中实现批量行提取,或者如果正在使用基于 DAO 的类(已过时),ClassWizard 将通过为记录集中的每个字段数据成员调用 RFX 函数(对于 ODBC 类)或 DFX 函数(对于 DAO 类),来重写 DoFieldExchangeCRecordsetCDaoRecordset 成员函数。

记录字段交换函数在框架每次调用 DoFieldExchangeDoBulkFieldExchange时传输数据。 每个函数传输一种特定的数据类型。

有关如何使用这些函数的详细信息,请参阅 记录字段交换:RFX 的工作方式 (ODBC)一文。 有关批量行提取的详细信息,请参阅 记录集:批量提取记录 (ODBC)一文。

对于动态绑定的数据列,你还可以自行调用 RFX 或 DFX 函数,如 记录集:动态绑定数据列 (ODBC)一文中所述。 此外,你还可以编写自己的自定义 RFX 或 DFX 例程,如技术说明 43 (针对 ODBC)和技术说明 53 (针对 DAO)中所述。

有关出现在 DoFieldExchangeDoBulkFieldExchange 函数中的 RFX 和批量 RFX 函数的示例,请参阅 RFX_Text 和 [RFX_Text_Bulk]#rfx_text_bulk)。 DFX 函数与 RFX 函数非常类似。

RFX 函数 (ODBC)

名称 描述
RFX_Binary 传输 CByteArray类型的字节数组。
RFX_Bool 传输布尔数据。
RFX_Byte 传输单字节数据。
RFX_Date 使用 CTime 或 TIMESTAMP_STRUCT 传输时间和日期数据。
RFX_Double 传输双精度浮点数据。
RFX_Int 传输整型数据。
RFX_Long 传输长整型数据。
RFX_LongBinary 使用 CLongBinary 类的对象传输二进制大型对象 (BLOB) 数据。
RFX_Single 传输浮点数据。
RFX_Text 传输字符串数据。

批量 RFX 函数 (ODBC)

名称 描述
RFX_Binary_Bulk 传输字节数据数组。
RFX_Bool_Bulk 传输布尔数据数组。
RFX_Byte_Bulk 传输单字节数组。
RFX_Date_Bulk 传输 TIMESTAMP_STRUCT类型的数据数组。
RFX_Double_Bulk 传输双精度浮点数据数组。
RFX_Int_Bulk 传输整型数据数组。
RFX_Long_Bulk 传输长整型数据数组。
RFX_Single_Bulk 传输浮点数据数组。
RFX_Text_Bulk 传输 LPSTR类型的数据数组。

DFX 函数 (DAO)

名称 描述
DFX_Binary 传输 CByteArray类型的字节数组。
DFX_Bool 传输布尔数据。
DFX_Byte 传输单字节数据。
DFX_Currency 传输 COleCurrency类型的货币数据。
DFX_DateTime 传输 COleDateTime类型的时间和日期数据。
DFX_Double 传输双精度浮点数据。
DFX_Long 传输长整型数据。
DFX_LongBinary 使用 CLongBinary 类的对象传输二进制大型对象 (BLOB) 数据。 对于 DAO,建议改用 DFX_Binary
DFX_Short 传输短整型数据。
DFX_Single 传输浮点数据。
DFX_Text 传输字符串数据。

=============================================

RFX_Binary

CRecordset 对象的字段数据成员与 ODBC 类型 SQL_BINARY、SQL_VARBINARY 或 SQL_LONGVARBINARY 的数据源上的记录的列之间传输字节数组。

语法

void RFX_Binary(
   CFieldExchange* pFX,
   const char* szName,
   CByteArray& value,
   int nMaxLength = 255);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CByteArray 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

nMaxLength
正在传输的字符串或数组的允许的最大长度。 nMaxLength 的默认值为 255。 合法的值为 1 到 INT_MAX。 框架为数据分配此空间量。 为了获得最佳性能,传递一个足够大的值来容纳预期的最大数据项。

注解

这些类型的数据源中的数据映射到记录集中的 CByteArray 类型并从该类型映射。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Bool

CRecordset 对象的字段数据成员与 ODBC 类型 SQL_BIT 的数据源上的记录的列之间传输布尔数据。

语法

void RFX_Bool(
   CFieldExchange* pFX,
   const char* szName,
   BOOL& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 BOOL 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Byte

CRecordset 对象的字段数据成员与 ODBC 类型 SQL_TINYINT 的数据源上的记录的列之间传输单字节。

语法

void RFX_Byte(
   CFieldExchange* pFX,
   const char* szName,
   BYTE& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,将从指定数据成员中提取 BYTE 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Date

CRecordset 对象的字段数据成员和位于 ODBC 类型 SQL_DATE、SQL_TIME 或 SQL_TIMESTAMP 的数据源上的记录的列之间,传输 CTime 或 TIMESTAMP_STRUCT 数据。

语法

void RFX_Date(
   CFieldExchange* pFX,
   const char* szName,
   CTime& value);

void RFX_Date(
   CFieldExchange* pFX,
   const char* szName,
   TIMESTAMP_STRUCT& value);

void RFX_Date(
   CFieldExchange* pFX,
   const char* szName,
   COleDateTime& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 函数的各种版本对值采用不同的数据类型:

函数的第一个版本引用 CTime 对象。 对于从记录集到数据源的传输,此值是从指定的数据成员提取的。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

函数的第二个版本引用 TIMESTAMP_STRUCT 结构。 你必须在调用之前自行设置此结构。 此版本既不支持对话框数据交换 (DDX),也不支持代码向导。 第三个版本的函数的工作方式与第一个版本类似,只是它引用 COleDateTime 对象。

备注

函数的 CTime 版本施加了一些中间处理的开销,并且范围比较有限。 如果发现这些因素之一太具局限性,请使用函数的第二个版本。 但请注意,该版本缺少代码向导和 DDX 支持,并且要求你自行设置结构。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Double

CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_DOUBLE 的数据源上的记录的列之间传输双精度浮点型数据

语法

void RFX_Double(
   CFieldExchange* pFX,
   const char* szName,
   double& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 double 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Int

CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_SMALLINT 的数据源上的记录的列之间传输整数数据。

语法

void RFX_Int(
   CFieldExchange* pFX,
   const char* szName,
   int& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 int 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Long

CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_INTEGER 的数据源上的记录的列之间传输长整型数据。

语法

void RFX_Long(
   CFieldExchange* pFX,
   const char* szName,
   LONG&
value );

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 long 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_LongBinary

使用 CLongBinary 类,在 CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_LONGVARBINARY 或 SQL_LONGVARCHAR 的数据源上的记录的列之间传输二进制大型对象 (BLOB) 数据。

语法

void RFX_LongBinary(
   CFieldExchange* pFX,
   const char* szName,
   CLongBinary& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CLongBinary 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Single

CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_REAL 的数据源上的记录的列之间传输浮点数据。

语法

void RFX_Single(
   CFieldExchange* pFX,
   const char* szName,
   float& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 float 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Text

CRecordset 对象的字段数据成员和位于 ODBC 类型 SQL_LONGVARCHAR、SQL_CHAR、SQL_VARCHAR、SQL_DECIMAL 或 SQL_NUMERIC 的数据源上的记录的列之间传输 CString 数据。

语法

void RFX_Text(
   CFieldExchange* pFX,
   const char* szName,
   CString& value,
   int nMaxLength = 255,
   int nColumnType = SQL_VARCHAR,
   short nScale = 0);

参数

pFX
指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CString 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

nMaxLength
正在传输的字符串或数组的允许的最大长度。 nMaxLength 的默认值为 255。 合法的值为 1 到 INT_MAX)。 框架为数据分配此空间量。 为了获得最佳性能,传递一个足够大的值来容纳预期的最大数据项。

nColumnType
主要用于参数。 一个指示参数的数据类型的整数。 类型是 SQL_XXX 窗体的 ODBC 数据类型

nScale
指定 ODBC 类型 SQL_DECIMAL 或 SQL_NUMERIC 的值的小数位数。 nScale 仅在设置参数值时有用。 有关详细信息,请参阅《ODBC SDK 程序员参考》附录 D 中的“精度、小数位数、长度和显示大小”主题

备注

所有这些类型的数据源中的数据都映射到记录集中的 CString 类型并从该类型映射。

示例

此示例演示对 RFX_Text 的多次调用。 另请注意对 CFieldExchange::SetFieldType 的两次调用。 对于参数,你必须写入对 SetFieldType 的调用以及其 RFX 调用。 通常由代码向导编写输出列调用及其关联的 RFX 调用。

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);
}

要求

标头:afxdb.h

RFX_Binary_Bulk

将多行字节数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Binary_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   BYTE** prgByteVals,
   long** prgLengths,
   int nMaxLength);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgByteVals
指向 BYTE 值的数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgByteVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

nMaxLength
prgByteVals 指向的数组中存储的值的允许的最大长度。 要确保数据不会被截断,请传递一个足够大的值来容纳预期的最大数据项。

备注

数据源列可以拥有 ODBC 类型 SQL_BINARY、SQL_VARBINARY 或 SQL_LONGVARBINARY。 记录集必须定义 BYTE 的类型指针的字段数据成员。

如果将 prgByteVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 若要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Bool_Bulk

将多行布尔数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Bool_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   BOOL** prgBoolVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgBoolVals
指向一个 BOOL 值数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgBoolVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列必须具有 ODBC 类型 SQL_BIT。 记录集必须定义 BOOL 的类型指针的字段数据成员。

如果将 prgBoolVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Byte_Bulk

将多个单字节的行从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Byte_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   BYTE** prgByteVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgByteVals
指向 BYTE 值的数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgByteVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列必须具有 ODBC 类型 SQL_TINYINT。 记录集必须定义 BYTE 的类型指针的字段数据成员。

如果将 prgByteVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Date_Bulk

将多行 TIMESTAMP_STRUCT 数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Date_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   TIMESTAMP_STRUCT** prgTSVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgTSVals
指向一个 TIMESTAMP_STRUCT 值数组的指针。 此数组将存储要从数据源传输到记录集的数据。 有关 TIMESTAMP_STRUCT 数据类型的详细信息,请参阅《ODBC SDK 程序员参考》的附录 D 中的主题“C 数据类型”

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgTSVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列可以具有 ODBC 类型 SQL_DATE、SQL_TIME 或 SQL_TIMESTAMP。 记录集必须定义 TIMESTAMP_STRUCT 的类型指针的字段数据成员。

如果将 prgTSVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Double_Bulk

将多行双精度浮点数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Double_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   double** prgDblVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgDblVals
一个指向 double 值的数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgDblVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列必须具有 ODBC 类型 SQL_DOUBLE。 记录集必须定义 double 的类型指针的字段数据成员。

如果将 prgDblVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Int_Bulk

CRecordset 对象的字段数据成员与位于 ODBC 类型 SQL_SMALLINT 的数据源上的记录的列之间传输整数数据。

语法

void RFX_Int(
   CFieldExchange* pFX,
   const char* szName,
   int& value);

参数

pFX
一个指向 CFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关 CFieldExchange 对象可指定的操作的详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 int 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

示例

请参阅 RFX_Text

要求

标头:afxdb.h

RFX_Long_Bulk

将多行长整型数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Long_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   long** prgLongVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgLongVals
指向一个长整型数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgLongVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列必须具有 ODBC 类型 SQL_INTEGER。 记录集必须定义 long 的类型指针的字段数据成员。

如果将 prgLongVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Single_Bulk

将多行浮点数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Single_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   float** prgFltVals,
   long** prgLengths);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgFltVals
一个指向 float 值的数组的指针。 此数组将存储要从数据源传输到记录集的数据。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgFltVals 指向的数组中的每个值的长度(以字节为单位)。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

备注

数据源列必须具有 ODBC 类型 SQL_REAL。 记录集必须定义 float 的类型指针的字段数据成员。

如果将 prgFltVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

请参阅 RFX_Text_Bulk

要求

标头:afxdb.h

RFX_Text_Bulk

将多行字符数据从 ODBC 数据源列传输到 CRecordset 派生对象中的对应数组。

语法

void RFX_Text_Bulk(
   CFieldExchange* pFX,
   LPCTSTR szName,
   LPSTR* prgStrVals,
   long** prgLengths,
   int nMaxLength);

参数

pFX
指向 CFieldExchange 对象的指针。 此对象包含用于定义每次函数时的上下文的信息。 有关详细信息,请参阅记录字段交换:RFX 的工作方式一文。

szName
数据列的名称。

prgStrVals
指向一个 LPSTR 值数组的指针。 此数组将存储要从数据源传输到记录集的数据。 请注意,如果使用当前版本的 ODBC,这些值不能为 Unicode。

prgLengths
指向一个长整型数组的指针。 此数组将存储 prgStrVals 指向的数组中的每个值的长度(以字节为单位)。 此长度不包括 null 终止字符。 请注意,如果相应的数据项包含 Null 值,则将存储值 SQL_NULL_DATA。 有关详细信息,请参阅《ODBC SDK 程序员参考》中的 ODBC API 函数 SQLBindCol

nMaxLength
prgStrVals 指向的数组中存储的值的允许的最大长度,包括 null 终止字符 要确保数据不会被截断,请传递一个足够大的值来容纳预期的最大数据项。

备注

数据源列可以具有 ODBC 类型 SQL_LONGVARCHAR、SQL_CHAR、SQL_VARCHAR、SQL_DECIMAL 或 SQL_NUMERIC。 记录集必须定义 LPSTR 类型的字段数据成员。

如果将 prgStrVals 和 prgLengths 初始化为 NULL,则系统会自动分配它们指向的数组(大小等于行集大小)

注意

批量记录字段交换仅将数据从数据源传输到记录集对象。 要使记录集可更新,你必须使用 ODBC API 函数 SQLSetPos

有关详细信息,请参阅文章记录集:批量提取记录 (ODBC)记录字段交换 (RFX)

示例

你必须在 DoBulkFieldExchange 重写中手动编写调用。 此示例演示用于数据传输的 RFX_Text_Bulk 调用以及 RFX_Long_Bulk 调用。 这些调用的前面是对 CFieldExchange::SetFieldType 的调用。 请注意,对于参数,你必须调用 RFX 函数,而不是批量 RFX 函数。

void CMultiCustomer::DoBulkFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   RFX_Long_Bulk(pFX, _T("[CustomerID]"), &m_pCustomerID, &m_pcCustomerID);
   RFX_Text_Bulk(pFX, _T("[ContactFirstName]"), &m_pContactFirstName, &m_pcContactFirstName, 50);
   RFX_Text_Bulk(pFX, _T("[PostalCode]"), &m_pPostalCode, &m_pcPostalCode, 50);
   RFX_Text_Bulk(pFX, _T("[L_Name]"), &m_pL_Name, &m_pcL_Name, 50);
   RFX_Long_Bulk(pFX, _T("[BillingID]"), &m_pBillingID, &m_pcBillingID);

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param"), m_strParam);
}

要求

标头:afxdb.h

DFX_Binary

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输字节数组。

语法

void AFXAPI DFX_Binary(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   CByteArray& value,
   int nPreAllocSize = AFX_DAO_BINARY_DEFAULT_SIZE,
   DWORD dwBindOptions = 0);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CByteArray 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

nPreAllocSize
框架预分配此内存量。 如果数据较大,框架将根据需要分配更多空间。 为了提高性能,将此大小设置为足够大的值,以防止重新分配。 默认大小在 AFXDAO.H 文件中定义为 AFX_DAO_BINARY_DEFAULT_SIZE。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_DISABLE_FIELD_CACHE 不使用双缓冲,你必须自行调用 SetFieldDirtySetFieldNull。 另一个可能的值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲,你无需执行额外的工作来将字段标记为“脏”或“Null”。 出于性能和内存原因,请避免使用此值,除非二进制数据相对较小。

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认为所有字段都对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_BYTES 类型和记录集中的 CByteArray 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Bool

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输布尔数据。

语法

void AFXAPI DFX_Bool(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   BOOL& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 BOOL 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_BOOL 类型和记录集中的 BOOL 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Byte

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输单字节。

语法

void AFXAPI DFX_Byte(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   BYTE& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,将从指定数据成员中提取 BYTE 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

注解

数据在 DAO 中的类型 DAO_BYTES 和记录集中的类型 BYTE 之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Currency

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输货币数据。

语法

void AFXAPI DFX_Currency(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   COleCurrency& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,此值是从 COleCurrency 类型的指定数据成员提取的。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_CURRENCY 类型和记录集中的 COleCurrency 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_DateTime

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输时间和日期数据。

语法

void AFXAPI DFX_DateTime(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   COleDateTime& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 该函数引用 COleDateTime 对象。 对于从记录集到数据源的传输,此值是从指定的数据成员提取的。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_DATE 类型和记录集中的 COleDateTime 类型之间映射。

注意

为此,在 DAO 类中,COleDateTime 重写 CTime 和 TIMESTAMP_STRUCT。 CTime 和 TIMESTAMP_STRUCT 仍用于基于 ODBC 的数据访问类。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Double

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输双精度浮点型数据

语法

void AFXAPI DFX_Double(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   double& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 double 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

注解

数据在 DAO 中的 DAO_R8 类型和记录集中的“双精度浮点”类型之间映射

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Long

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输长整型数据。

语法

void AFXAPI DFX_Long(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   long& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 long 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_I4 类型和记录集中的 long 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_LongBinary

重要提示:建议你使用 DFX_Binary,而不是此函数。

语法

void AFXAPI DFX_LongBinary(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   CLongBinary& value,
   DWORD dwPreAllocSize = AFX_DAO_LONGBINARY_DEFAULT_SIZE,
   DWORD dwBindOptions = 0);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CLongBinary 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwPreAllocSize
框架预分配此内存量。 如果数据较大,框架将根据需要分配更多空间。 为了提高性能,将此大小设置为足够大的值,以防止重新分配。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DISABLE_FIELD_CACHE 不使用双缓冲。 另一个可能的值为 AFX_DAO_ENABLE_FIELD_CACHE。 使用双缓冲,你无需执行额外的工作来将字段标记为“脏”或“Null”。 出于性能和内存原因,请避免使用此值,除非二进制数据相对较小。

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

提供了 DFX_LongBinary,以便与 MFC ODBC 类兼容。 DFX_LongBinary 函数在 CDaoRecordset 对象的字段数据成员和数据源上的记录列之间使用CLongBinary类传输二进制大型对象(BLOB)数据。 数据在 DAO 中的 DAO_BYTES 类型和记录集中的 CLongBinary 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Short

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输短整型数据。

语法

void AFXAPI DFX_Short(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   short& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 short 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

注解

数据在 DAO 中的 DAO_I2 类型和记录集中的 short 类型之间映射。

注意

对于基于 ODBC 的类,DFX_Short 等效于 RFX_Int

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Single

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输浮点数据。

语法

void AFXAPI DFX_Single(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   float& value,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 float 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 您必须调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_R4 类型和记录集中的 float 类型之间映射。

示例

请参阅 DFX_Text

要求

标头:afxdao.h

DFX_Text

CDaoRecordset 对象的字段数据成员与数据源上的记录的列之间传输 CString 数据。

语法

void AFXAPI DFX_Text(
   CDaoFieldExchange* pFX,
   LPCTSTR szName,
   CString& value,
   int nPreAllocSize = AFX_DAO_TEXT_DEFAULT_SIZE,
   DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);

参数

pFX
一个指向 CDaoFieldExchange 类的对象的指针。 此对象包含用于定义每次函数时的上下文的信息。

szName
数据列的名称。

value
存储在指定的数据成员中的值(要传输的值)。 对于从记录集到数据源的传输,从指定数据成员中提取 CString 类型的值。 对于从数据源得到记录集的传输,将在指定的数据成员中存储值。

nPreAllocSize
框架预分配此内存量。 如果数据较大,框架将根据需要分配更多空间。 为了提高性能,将此大小设置为足够大的值,以防止重新分配。

dwBindOptions
一个选项,用来支持您利用 MFC 的双缓冲机制来检测已更改的字段记录集。 默认值 AFX_DAO_ENABLE_FIELD_CACHE 使用双缓冲。 另一个可能的值为 AFX_DAO_DISABLE_FIELD_CACHE。 如果您指定此值,MFC 将不对此字段执行检查。 你必须自行调用 SetFieldDirtySetFieldNull

注意

你可以通过设置 CDaoRecordset::m_bCheckCacheForDirtyFields 来控制是否默认对数据进行双缓冲。

备注

数据在 DAO 中的 DAO_CHAR 类型(如果定义了符号 _UNICODE,则为 DAO_WCHAR 类型)和记录集中的 CString 类型之间映射。 n

示例

此示例演示对 DFX_Text 的多次调用。 另请注意对 CDaoFieldExchange::SetFieldType 的两次调用。 你必须编写对 SetFieldType 的第一次调用及其 DFX 调用。 第二次调用及其关联的 DFX 调用通常由生成类的代码向导编写

void CCustSet::DoFieldExchange(CDaoFieldExchange* pFX)
{
   pFX->SetFieldType(CDaoFieldExchange::param);
   DFX_Text(pFX, _T("Param"), m_strParam);
   pFX->SetFieldType(CDaoFieldExchange::outputColumn);
   DFX_Short(pFX, _T("EmployeeID"), m_EmployeeID);
   DFX_Text(pFX, _T("LastName"), m_LastName);
   DFX_Short(pFX, _T("Age"), m_Age);
   DFX_DateTime(pFX, _T("hire_date"), m_hire_date);
   DFX_DateTime(pFX, _T("termination_date"), m_termination_date);

   CDaoRecordset::DoFieldExchange(pFX);
}

要求

标头:afxdao.h

另请参阅

宏和全局函数
CRecordset::DoFieldExchange
CRecordset::DoBulkFieldExchange
CDaoRecordset::DoFieldExchange