一、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時,必須對應。