Record Field Exchange Functions
This topic lists the Record Field Exchange (RFX, Bulk RFX, and DFX) functions used to automate the transfer of data between a recordset object and its data source and to perform other operations on the data.
If you are using the ODBC-based classes and you have implemented bulk row fetching, you must manually override the DoBulkFieldExchange
member function of CRecordset
by calling the Bulk RFX functions for each data member corresponding to a data source column.
If you have not implemented bulk row fetching in the ODBC-based classes, or if you are using the DAO-based classes (obsolete), then ClassWizard will override the DoFieldExchange
member function of CRecordset
or CDaoRecordset
by calling the RFX functions (for ODBC classes) or the DFX functions (for DAO classes) for each field data member in your recordset.
The record field exchange functions transfer data each time the framework calls DoFieldExchange
or DoBulkFieldExchange
. Each function transfers a specific data type.
For more information about how these functions are used, see the articles Record Field Exchange: How RFX Works (ODBC). For more information about bulk row fetching, see the article Recordset: Fetching Records in Bulk (ODBC).
For columns of data that you bind dynamically, you can also call the RFX or DFX functions yourself, as explained in the articles Recordset: Dynamically Binding Data Columns (ODBC). Additionally, you can write your own custom RFX or DFX routines, as explained in Technical Note 43 (for ODBC) and Technical Note 53 (for DAO).
For an example of RFX and Bulk RFX functions as they appear in the DoFieldExchange
and DoBulkFieldExchange
functions, see RFX_Text and [RFX_Text_Bulk]#rfx_text_bulk). DFX functions are very similar to the RFX functions.
RFX Functions (ODBC)
Name | Description |
---|---|
RFX_Binary | Transfers arrays of bytes of type CByteArray. |
RFX_Bool | Transfers Boolean data. |
RFX_Byte | Transfers a single byte of data. |
RFX_Date | Transfers time and date data using CTime or TIMESTAMP_STRUCT. |
RFX_Double | Transfers double-precision float data. |
RFX_Int | Transfers integer data. |
RFX_Long | Transfers long integer data. |
RFX_LongBinary | Transfers binary large object (BLOB) data with an object of the CLongBinary class. |
RFX_Single | Transfers float data. |
RFX_Text | Transfers string data. |
Bulk RFX Functions (ODBC)
Name | Description |
---|---|
RFX_Binary_Bulk | Transfers arrays of byte data. |
RFX_Bool_Bulk | Transfers arrays of Boolean data. |
RFX_Byte_Bulk | Transfers arrays of single bytes. |
RFX_Date_Bulk | Transfers arrays of data of type TIMESTAMP_STRUCT. |
RFX_Double_Bulk | Transfers arrays of double-precision, floating-point data. |
RFX_Int_Bulk | Transfers arrays of integer data. |
RFX_Long_Bulk | Transfers arrays of long integer data. |
RFX_Single_Bulk | Transfers arrays of floating-point data. |
RFX_Text_Bulk | Transfers arrays of data of type LPSTR. |
DFX Functions (DAO)
Name | Description |
---|---|
DFX_Binary | Transfers arrays of bytes of type CByteArray. |
DFX_Bool | Transfers Boolean data. |
DFX_Byte | Transfers a single byte of data. |
DFX_Currency | Transfers currency data, of type COleCurrency. |
DFX_DateTime | Transfers time and date data, of type COleDateTime. |
DFX_Double | Transfers double-precision float data. |
DFX_Long | Transfers long integer data. |
DFX_LongBinary | Transfers binary large object (BLOB) data with an object of the CLongBinary class. For DAO, it is recommended that you use DFX_Binary instead. |
DFX_Short | Transfers short integer data. |
DFX_Single | Transfers float data. |
DFX_Text | Transfers string data. |
=============================================
RFX_Binary
Transfers arrays of bytes between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_BINARY, SQL_VARBINARY, or SQL_LONGVARBINARY.
Syntax
void RFX_Binary(
CFieldExchange* pFX,
const char* szName,
CByteArray& value,
int nMaxLength = 255);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CByteArray, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
nMaxLength
The maximum allowed length of the string or array being transferred. The default value of nMaxLength is 255. Legal values are 1 to INT_MAX. The framework allocates this amount of space for the data. For best performance, pass a value large enough to accommodate the largest data item you expect.
Remarks
Data in the data source of these types is mapped to and from type CByteArray
in the recordset.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Bool
Transfers Boolean data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_BIT.
Syntax
void RFX_Bool(
CFieldExchange* pFX,
const char* szName,
BOOL& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type BOOL, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Byte
Transfers single bytes between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_TINYINT.
Syntax
void RFX_Byte(
CFieldExchange* pFX,
const char* szName,
BYTE& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type BYTE, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Date
Transfers CTime
or TIMESTAMP_STRUCT data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_DATE, SQL_TIME, or SQL_TIMESTAMP.
Syntax
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);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member; the value to be transferred. The various versions of the function take different data types for value:
The first version of the function takes a reference to a CTime object. For a transfer from recordset to data source, this value is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
The second version of the function takes a reference to a TIMESTAMP_STRUCT
structure. You must set up this structure yourself before the call. Neither dialog data exchange (DDX) support nor code wizard support is available for this version. The third version of the function works similarly to the first version except that it takes a reference to a COleDateTime object.
Remarks
The CTime
version of the function imposes the overhead of some intermediate processing and has a somewhat limited range. If you find either of these factors too limiting, use the second version of the function. But note its lack of code wizard and DDX support and the requirement that you set up the structure yourself.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Double
Transfers double float data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_DOUBLE.
Syntax
void RFX_Double(
CFieldExchange* pFX,
const char* szName,
double& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type double
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Int
Transfers integer data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_SMALLINT.
Syntax
void RFX_Int(
CFieldExchange* pFX,
const char* szName,
int& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type int
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Long
Transfers long integer data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_INTEGER.
Syntax
void RFX_Long(
CFieldExchange* pFX,
const char* szName,
LONG&
value );
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type long
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_LongBinary
Transfers binary large object (BLOB) data using class CLongBinary between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_LONGVARBINARY or SQL_LONGVARCHAR.
Syntax
void RFX_LongBinary(
CFieldExchange* pFX,
const char* szName,
CLongBinary& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CLongBinary
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Single
Transfers floating-point data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_REAL.
Syntax
void RFX_Single(
CFieldExchange* pFX,
const char* szName,
float& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type float
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Text
Transfers CString
data between the field data members of a CRecordset
object and columns of a record on the data source of ODBC type SQL_LONGVARCHAR, SQL_CHAR, SQL_VARCHAR, SQL_DECIMAL, or SQL_NUMERIC.
Syntax
void RFX_Text(
CFieldExchange* pFX,
const char* szName,
CString& value,
int nMaxLength = 255,
int nColumnType = SQL_VARCHAR,
short nScale = 0);
Parameters
pFX
A pointer to an object of class CFieldExchange
. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CString
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
nMaxLength
The maximum allowed length of the string or array being transferred. The default value of nMaxLength is 255. Legal values are 1 to INT_MAX). The framework allocates this amount of space for the data. For best performance, pass a value large enough to accommodate the largest data item you expect.
nColumnType
Used mainly for parameters. An integer indicating the data type of the parameter. The type is an ODBC data type of the form SQL_XXX.
nScale
Specifies the scale for values of ODBC type SQL_DECIMAL or SQL_NUMERIC. nScale is only useful when setting parameter values. For more information, see the topic "Precision, Scale, Length, and Display Size" in Appendix D of the ODBC SDK Programmer's Reference.
Remarks
Data in the data source of all of these types is mapped to and from CString
in the recordset.
Example
This example shows several calls to RFX_Text
. Notice also the two calls to CFieldExchange::SetFieldType
. For parameters you must write the call to SetFieldType
and its RFX call. The output column call and its associated RFX calls are normally written by a code wizard.
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);
}
Requirements
Header: afxdb.h
RFX_Binary_Bulk
Transfers multiple rows of byte data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Binary_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
BYTE** prgByteVals,
long** prgLengths,
int nMaxLength);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgByteVals
A pointer to an array of BYTE values. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgByteVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
nMaxLength
The maximum allowed length of the values stored in the array pointed to by prgByteVals. To ensure that data will not be truncated, pass a value large enough to accommodate the largest data item you expect.
Remarks
The data source column can have an ODBC type of SQL_BINARY, SQL_VARBINARY, or SQL_LONGVARBINARY. The recordset must define a field data member of type pointer to BYTE.
If you initialize prgByteVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. In order to make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Bool_Bulk
Transfers multiple rows of Boolean data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Bool_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
BOOL** prgBoolVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgBoolVals
A pointer to an array of BOOL values. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgBoolVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column must have an ODBC type of SQL_BIT. The recordset must define a field data member of type pointer to BOOL.
If you initialize prgBoolVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Byte_Bulk
Transfers multiple rows of single bytes from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Byte_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
BYTE** prgByteVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgByteVals
A pointer to an array of BYTE values. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgByteVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column must have an ODBC type of SQL_TINYINT. The recordset must define a field data member of type pointer to BYTE.
If you initialize prgByteVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Date_Bulk
Transfers multiple rows of TIMESTAMP_STRUCT data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Date_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
TIMESTAMP_STRUCT** prgTSVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgTSVals
A pointer to an array of TIMESTAMP_STRUCT values. This array will store the data to be transferred from the data source to the recordset. For more information about the TIMESTAMP_STRUCT data type, see the topic "C Data Types" in Appendix D of the ODBC SDK Programmer's Reference.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgTSVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column can have an ODBC type of SQL_DATE, SQL_TIME, or SQL_TIMESTAMP. The recordset must define a field data member of type pointer to TIMESTAMP_STRUCT.
If you initialize prgTSVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Double_Bulk
Transfers multiple rows of double-precision, floating-point data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Double_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
double** prgDblVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgDblVals
A pointer to an array of double
values. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgDblVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column must have an ODBC type of SQL_DOUBLE. The recordset must define a field data member of type pointer to double
.
If you initialize prgDblVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Int_Bulk
Transfers integer data between the field data members of a CRecordset
object and the columns of a record on the data source of ODBC type SQL_SMALLINT.
Syntax
void RFX_Int(
CFieldExchange* pFX,
const char* szName,
int& value);
Parameters
pFX
A pointer to an object of class CFieldExchange. This object contains information to define the context for each call of the function. For more information about the operations a CFieldExchange
object can specify, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type int
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
Example
See RFX_Text.
Requirements
Header: afxdb.h
RFX_Long_Bulk
Transfers multiple rows of long integer data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Long_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
long** prgLongVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgLongVals
A pointer to an array of long integers. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgLongVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column must have an ODBC type of SQL_INTEGER. The recordset must define a field data member of type pointer to long
.
If you initialize prgLongVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Single_Bulk
Transfers multiple rows of floating-point data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Single_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
float** prgFltVals,
long** prgLengths);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgFltVals
A pointer to an array of float
values. This array will store the data to be transferred from the data source to the recordset.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgFltVals. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
Remarks
The data source column must have an ODBC type of SQL_REAL. The recordset must define a field data member of type pointer to float
.
If you initialize prgFltVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
See RFX_Text_Bulk.
Requirements
Header: afxdb.h
RFX_Text_Bulk
Transfers multiple rows of character data from a column of an ODBC data source to a corresponding array in a CRecordset
-derived object.
Syntax
void RFX_Text_Bulk(
CFieldExchange* pFX,
LPCTSTR szName,
LPSTR* prgStrVals,
long** prgLengths,
int nMaxLength);
Parameters
pFX
A pointer to a CFieldExchange object. This object contains information to define the context for each call of the function. For more information, see the article Record Field Exchange: How RFX Works.
szName
The name of a data column.
prgStrVals
A pointer to an array of LPSTR values. This array will store the data to be transferred from the data source to the recordset. Note that with the current version of ODBC, these values cannot be Unicode.
prgLengths
A pointer to an array of long integers. This array will store the length in bytes of each value in the array pointed to by prgStrVals. This length excludes the null termination character. Note that the value SQL_NULL_DATA will be stored if the corresponding data item contains a Null value. For more details, see the ODBC API function SQLBindCol
in the ODBC SDK Programmer's Reference.
nMaxLength
The maximum allowed length of the values stored in the array pointed to by prgStrVals, including the null termination character. To ensure that data will not be truncated, pass a value large enough to accommodate the largest data item you expect.
Remarks
The data source column can have an ODBC type of SQL_LONGVARCHAR, SQL_CHAR, SQL_VARCHAR, SQL_DECIMAL, or SQL_NUMERIC. The recordset must define a field data member of type LPSTR.
If you initialize prgStrVals and prgLengths to NULL, then the arrays they point to will be allocated automatically, with sizes equal to the rowset size.
Note
Bulk record field exchange only transfers data from the data source to the recordset object. To make your recordset updateable, you must use the ODBC API function SQLSetPos
.
For more information, see the articles Recordset: Fetching Records in Bulk (ODBC) and Record Field Exchange (RFX).
Example
You must manually write calls in your DoBulkFieldExchange
override. This example shows a call to RFX_Text_Bulk
, as well as a call to RFX_Long_Bulk
, for data transfer. These calls are preceded by a call to CFieldExchange::SetFieldType. Note that for parameters, you must call the RFX functions instead of the Bulk RFX functions.
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);
}
Requirements
Header: afxdb.h
DFX_Binary
Transfers arrays of bytes between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Binary(
CDaoFieldExchange* pFX,
LPCTSTR szName,
CByteArray& value,
int nPreAllocSize = AFX_DAO_BINARY_DEFAULT_SIZE,
DWORD dwBindOptions = 0);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CByteArray, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
nPreAllocSize
The framework preallocates this amount of memory. If your data is larger, the framework will allocated more space as needed. For better performance, set this size to a value large enough to prevent reallocations. The default size is defined in the AFXDAO.H file as AFX_DAO_BINARY_DEFAULT_SIZE.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_DISABLE_FIELD_CACHE, does not use double buffering, and you must call SetFieldDirty and SetFieldNull yourself. The other possible value, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering, and you do not have to do extra work to mark fields dirty or Null. For performance and memory reasons, avoid this value unless your binary data is relatively small.
Note
You can control whether data is double buffered for all fields by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_BYTES in DAO and type CByteArray in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Bool
Transfers Boolean data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Bool(
CDaoFieldExchange* pFX,
LPCTSTR szName,
BOOL& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type BOOL, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_BOOL in DAO and type BOOL in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Byte
Transfers single bytes between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Byte(
CDaoFieldExchange* pFX,
LPCTSTR szName,
BYTE& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type BYTE, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_BYTES in DAO and type BYTE in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Currency
Transfers currency data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Currency(
CDaoFieldExchange* pFX,
LPCTSTR szName,
COleCurrency& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, this value is taken from the specified data member, of type COleCurrency. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_CURRENCY in DAO and type COleCurrency in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_DateTime
Transfers time and date data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_DateTime(
CDaoFieldExchange* pFX,
LPCTSTR szName,
COleDateTime& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. The function takes a reference to a COleDateTime object. For a transfer from recordset to data source, this value is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_DATE in DAO and type COleDateTime in the recordset.
Note
COleDateTime
replaces CTime and TIMESTAMP_STRUCT for this purpose in the DAO classes. CTime
and TIMESTAMP_STRUCT are still used for the ODBC-based data access classes.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Double
Transfers double float data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Double(
CDaoFieldExchange* pFX,
LPCTSTR szName,
double& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type double
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_R8 in DAO and type double float in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Long
Transfers long integer data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Long(
CDaoFieldExchange* pFX,
LPCTSTR szName,
long& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type long
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_I4 in DAO and type long
in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_LongBinary
Important It is recommended that you use DFX_Binary instead of this function.
Syntax
void AFXAPI DFX_LongBinary(
CDaoFieldExchange* pFX,
LPCTSTR szName,
CLongBinary& value,
DWORD dwPreAllocSize = AFX_DAO_LONGBINARY_DEFAULT_SIZE,
DWORD dwBindOptions = 0);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CLongBinary, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwPreAllocSize
The framework preallocates this amount of memory. If your data is larger, the framework will allocated more space as needed. For better performance, set this size to a value large enough to prevent reallocations.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DISABLE_FIELD_CACHE, does not use double buffering. The other possible value is AFX_DAO_ENABLE_FIELD_CACHE. Uses double buffering, and you do not have to do extra work to mark fields dirty or Null. For performance and memory reasons, avoid this value unless your binary data is relatively small.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
DFX_LongBinary
is provided for compatibility with the MFC ODBC classes. The DFX_LongBinary
function transfers binary large-object (BLOB) data using class CLongBinary
between the field data members of a CDaoRecordset object and the columns of a record on the data source. Data is mapped between type DAO_BYTES in DAO and type CLongBinary in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Short
Transfers short integer data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Short(
CDaoFieldExchange* pFX,
LPCTSTR szName,
short& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type short
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_I2 in DAO and type short
in the recordset.
Note
DFX_Short
is equivalent to RFX_Int for the ODBC-based classes.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Single
Transfers floating-point data between the field data members of a CDaoRecordset object and the columns of a record on the data source.
Syntax
void AFXAPI DFX_Single(
CDaoFieldExchange* pFX,
LPCTSTR szName,
float& value,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type float
, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty
and SetFieldNull
yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_R4 in DAO and type float
in the recordset.
Example
See DFX_Text.
Requirements
Header: afxdao.h
DFX_Text
Transfers CString
data between the field data members of a CDaoRecordset object and columns of a record on the data source.
Syntax
void AFXAPI DFX_Text(
CDaoFieldExchange* pFX,
LPCTSTR szName,
CString& value,
int nPreAllocSize = AFX_DAO_TEXT_DEFAULT_SIZE,
DWORD dwBindOptions = AFX_DAO_ENABLE_FIELD_CACHE);
Parameters
pFX
A pointer to an object of class CDaoFieldExchange. This object contains information to define the context for each call of the function.
szName
The name of a data column.
value
The value stored in the indicated data member — the value to be transferred. For a transfer from recordset to data source, the value, of type CString, is taken from the specified data member. For a transfer from data source to recordset, the value is stored in the specified data member.
nPreAllocSize
The framework preallocates this amount of memory. If your data is larger, the framework will allocated more space as needed. For better performance, set this size to a value large enough to prevent reallocations.
dwBindOptions
An option that lets you take advantage of MFC's double buffering mechanism for detecting recordset fields that have changed. The default, AFX_DAO_ENABLE_FIELD_CACHE, uses double buffering. The other possible value is AFX_DAO_DISABLE_FIELD_CACHE. If you specify this value, MFC does no checking on this field. You must call SetFieldDirty and SetFieldNull yourself.
Note
You can control whether data is double buffered by default by setting CDaoRecordset::m_bCheckCacheForDirtyFields.
Remarks
Data is mapped between type DAO_CHAR in DAO (or, if the symbol _UNICODE is defined, DAO_WCHAR) and type CString in the recordset. n
Example
This example shows several calls to DFX_Text
. Notice also the two calls to CDaoFieldExchange::SetFieldType. You must write the first call to SetFieldType
and its DFX call. The second call and its associated DFX calls are normally written by the code wizard that generated the class.
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);
}
Requirements
Header: afxdao.h
See also
Macros and Globals
CRecordset::DoFieldExchange
CRecordset::DoBulkFieldExchange
CDaoRecordset::DoFieldExchange