一、CRecordSet类中有一个成员变量m_pDatabase,它是指向数据库类的指针。可以通过以下方式将数据集关联到相应的数据库上:
1.CRecordSet rs;
rs.m_pDatabase=&m_database;
2.CRecordSet rs(&m_database);
二、可以定义一个类,例如crs类,继承于CRecordSet,在
DoFieldExchange(CFieldExchange*
pFX)函数中将数据库中的字段对应到该类(crs类)的成员变量中。这样,就可以通过直接访问该类中的成员变量,来访问查询出的记录集中的数据库中相应
的字段。注意,DoFieldExchange(CFieldExchange*
pFX)中的字段数必须不能大于数据库中的字段数。如果sql语句中有像select sum(num) as snum from **....
这样,不能把snum也作为一个字段对应到crs类的一个成员变量中。此时可以直接定义一个CRecordSet类的实例rs
,通过rs.GetFieldValue(0,varsum)
函数得到。其中,0是rs中要查询的字段的下标,从0开始。varsum是CDBVariant对象。通过varsum.m_iVal得到该字段的值(如
果该字段是int。但是sum函数求出的字段是double类型的,因此要用varsum.m_dblVal得到该子段的值)
msdn example:
// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);
// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while(!rs.IsEOF())
{
for(short index = 0; index < nFields; index++)
{
rs.GetFieldValue(index, varValue);
// do something with varValue
}
rs.MoveNext();
}
rs.Close();
db.Close();
三、当记录集的属性为CRecordset::forwardOnly时,可以不用讲列与字段绑定
但是当它为CRecordset::snapshot时,必须对应。