为生存而奔跑

   :: 首页 :: 联系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(3)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 256546
  • 排名 - 83

最新评论

阅读排行榜

评论排行榜

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

posted on 2010-08-04 07:39 baby-fly 阅读(1777) 评论(0)  编辑 收藏 引用 所属分类: Algorithm

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理