一、CRecordSet類中有一個(gè)成員變量m_pDatabase,它是指向數(shù)據(jù)庫類的指針。可以通過以下方式將數(shù)據(jù)集關(guān)聯(lián)到相應(yīng)的數(shù)據(jù)庫上:
1.CRecordSet rs;
rs.m_pDatabase=&m_database;
2.CRecordSet rs(&m_database);
二、可以定義一個(gè)類,例如crs類,繼承于CRecordSet,在
DoFieldExchange(CFieldExchange*
pFX)函數(shù)中將數(shù)據(jù)庫中的字段對應(yīng)到該類(crs類)的成員變量中。這樣,就可以通過直接訪問該類中的成員變量,來訪問查詢出的記錄集中的數(shù)據(jù)庫中相應(yīng)
的字段。注意,DoFieldExchange(CFieldExchange*
pFX)中的字段數(shù)必須不能大于數(shù)據(jù)庫中的字段數(shù)。如果sql語句中有像select sum(num) as snum from **....
這樣,不能把snum也作為一個(gè)字段對應(yīng)到crs類的一個(gè)成員變量中。此時(shí)可以直接定義一個(gè)CRecordSet類的實(shí)例rs
,通過rs.GetFieldValue(0,varsum)
函數(shù)得到。其中,0是rs中要查詢的字段的下標(biāo),從0開始。varsum是CDBVariant對象。通過varsum.m_iVal得到該字段的值(如
果該字段是int。但是sum函數(shù)求出的字段是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();
三、當(dāng)記錄集的屬性為CRecordset::forwardOnly時(shí),可以不用講列與字段綁定
但是當(dāng)它為CRecordset::snapshot時(shí),必須對應(yīng)。