This topic applies to the MFC ODBC classes.
This topic describes the data members that comprise the architecture of a recordset object:
![]() |
---|
This topic applies to objects derived from CRecordset in which bulk row fetching has not been implemented. If bulk row fetching is implemented, the architecture is similar. To understand the differences, see Recordset: Fetching Records in Bulk (ODBC). |
Sample Class
When you use the
В | ![]() |
---|---|
class CCourse : public CRecordset { public: CCourse(CDatabase* pDatabase = NULL); ... CString m_strCourseID; CString m_strCourseTitle; CString m_strIDParam; }; |
At the beginning of the class, the wizard writes a set of field data members. When you create the class, you must specify one or more field data members. If the class is parameterized, as the sample class is (with the data member m_strIDParam
), you must manually add parameter data members. The wizard does not support adding parameters to a class.
Field Data Members
The most important members of your recordset class are the field data members. For each column you select from the data source, the class contains a data member of the appropriate data type for that column. For example, the sample class shown at the beginning of this topic has two field data members, both of type CString, called m_strCourseID
and m_strCourseTitle
.
When the recordset selects a set of records, the framework automatically binds the columns of the current record (after the Open call, the first record is current) to the field data members of the object. That is, the framework uses the appropriate field data member as a buffer in which to store the contents of a record column.
As the user scrolls to a new record, the framework uses the field data members to represent the current record. The framework refreshes the field data members, replacing the previous record's values. The field data members are also used for updating the current record and for adding new records. As part of the process of updating a record, you specify the update values by assigning values directly to the appropriate field data member or members.
Parameter Data Members
If the class is parameterized, it has one or more parameter data members. A parameterized class lets you base a recordset query on information obtained or calculated at run time.
Typically, the parameter helps narrow the selection, as in the following example. Based on the sample class at the beginning of this topic, the recordset object might execute the following SQL statement:
В | ![]() |
---|---|
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = ? |
The "?" is a placeholder for a parameter value that you supply at run time. When you construct the recordset and set its m_strIDParam
data member to MATH101, the effective SQL statement for the recordset becomes:
В | ![]() |
---|---|
SELECT CourseID, CourseTitle FROM Course WHERE CourseID = MATH101 |
By defining parameter data members, you tell the framework about parameters in the SQL string. The framework binds the parameter, which lets ODBC know where to get values to substitute for the placeholder. In the example, the resulting recordset contains only the record from the Course table with a CourseID column whose value is MATH101. All specified columns of this record are selected. You can specify as many parameters (and placeholders) as you need.
![]() |
---|
MFC does nothing itself with the parameters — in particular, it does not perform a text substitution. Instead, MFC tells ODBC where to get the parameter; ODBC retrieves the data and performs the necessary parameterization. |
![]() |
---|
The order of parameters is important. For information about this and more information about parameters, see Recordset: Parameterizing a Recordset (ODBC). |
Using m_nFields and m_nParams
When a wizard writes a constructor for your class, it also initializes the
For more information and examples, see Record Field Exchange: Using RFX.