CRecordSet

CRecordSet

一、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时,必须对应。

你可能感兴趣的:(CRecordSet)