陋居

淡薄名利,修身养性

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  31 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

记录集的遍历、更新

根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
以下的代码实现:
打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。

_variant_t   vUsername,vBirthday,vID,vOld;

_RecordsetPtr   m_pRecordset;

m_pRecordset.CreateInstance( "ADODB.Recordset ");

m_pRecordset->
Open( "SELECT   *   FROM   users ",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);  

while(!m_pRecordset-> adoEOF)
///这里为什么是adoEOF而不是EOF呢?还记得rename( "EOF ", "adoEOF ")这一句吗?  

{   vID   =   m_pRecordset-> GetCollect(_variant_t((long)0)
);///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行

vUsername   =   m_pRecordset-> GetCollect( "username ");
///取得username字段的值

vOld   =   m_pRecordset-> GetCollect( "old ");

vBirthday   =   m_pRecordset-> GetCollect( "birthday ");
///在DEBUG方式下的OUTPUT窗口输出记录集中的记录

if(vID.vt   !=   VT_NULL   &&   vUsername.vt   !=   VT_NULL   &&   vOld.vt   !=   VT_NULL   &&   vBirthday.vt   !=   VT_NULL)

TRACE( "id:%d,姓名:%s,年龄:%d,生日:%s\r\n ",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday)   ;  

m_pRecordset-> MoveNext();
///移到下一条记录   }

m_pRecordset-> MoveFirst();
///移到首条记录   m_pRecordset-> Delete(adAffectCurrent);
///删除当前记录   ///添加三条新记录并赋值

for(int   i=0;i <3;i++)

{

m_pRecordset-> AddNew();///添加新记录  
m_pRecordset-> PutCollect( "ID ",_variant_t((long)(i+10)));
m_pRecordset-> PutCollect( "username ",_variant_t( "叶利钦 "));
m_pRecordset-> PutCollect( "old ",_variant_t((long)71));  
m_pRecordset-> PutCollect( "birthday ",_variant_t( "1930-3-15 "));

}  

m_pRecordset-> Move(1,_variant_t((long)adBookmarkFirst));
///从第一条记录往下移动一条记录,即移动到第二条记录处  

m_pRecordset-> PutCollect(_variant_t( "old "),_variant_t((long)45));
///修改其年龄

m_pRecordset-> Update();
///保存到库中  
posted on 2010-07-12 14:32 eircQ 阅读(423) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理