QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3579|回复: 1
打印 上一主题 下一主题

[转帖]在Visual C++中用ADO进行数据库编程(下)

[复制链接]
字体大小: 正常 放大
god        

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-3-30 22:53 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<TABLE cellPadding=0 cellSpacing=0 height=325 style="TABLE-LAYOUT: fixed" width="100%">
- |- V; y0 l& p7 C2 U, @/ H/ n3 }' x( {$ X- O0 n' j
<TR>
$ i) \- A8 |: L. H; _! ]<TD vAlign=top width=32></TD># O* ^4 r, v4 k0 T- |( X
<TD  vAlign=top>5. 记录集的遍历、更新
$ ^/ u, t4 \4 d' L7 n1 m0 K- t8 ^' C4 ]1 j0 Y9 q( P$ @7 z
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday3 _0 M% m$ t! k/ G" T
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,6 T' h- ]6 k. y4 {  z, G
更改其年龄,保存到数据库。
' }  \# _7 M% d" g4 N# y* F8 S- D_variant_t vUsername,vBirthday,vID,vOld;
' {, T* F) _0 X_RecordsetPtr m_pRecordset;
, r9 g. }5 h7 `7 \: d) M( p7 ^* Xm_pRecordset.CreateInstance("ADODB.Recordset");
2 C" G7 k* _* K/ ?; R2 P% X3 em_pRecordset-&gt;Open("SELECT * FROM users",3 i: z' G4 n* L5 G- T
_variant_t((IDispatch*)m_pConnection,true),) o2 j$ ]% d# `
adOpenStatic,* F' C5 [# n3 t3 s% N0 e; Y3 J
adLockOptimistic,
5 c- F1 t+ E- g. _ adCmdText);9 f3 F. v+ f) U' L( [$ H
while(!m_pRecordset-&gt;adoEOF)
" D$ u3 N. w0 p% L7 b{: K8 ~% o7 N6 ^2 X4 D
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,& {; {6 F: W' u# A" s
   ///你也可以直接给出列的名称,如下一行2 N: A& x' Z; }+ n; d6 {5 D
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
7 x) j$ M0 B2 \5 N   vOld = m_pRecordset-&gt;GetCollect("old");) O* y* b/ ]' S! X7 d& Y. O
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");  B' g* d8 I1 \" j5 L8 T3 Q" H
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
9 L* ^% p9 u  b+ H2 x; F( s   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL), v: h. c+ q" j: e* V, R
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
1 d, @. J9 \( z8 t/ [1 D/ M1 i; k% K vID.lVal,! w, c) d& p! e  S/ _
(LPCTSTR)(_bstr_t)vUsername,
) p% X3 N1 H0 i. h3 c" v8 h1 B vOld.lVal,
8 k4 ^! F: T# M (LPCTSTR)(_bstr_t)vBirthday);! F+ ~) D8 w/ i% j3 F# V
   m_pRecordset-&gt;MoveNext();///移到下一条记录# i% x) |3 C. [) S8 f
}% Y) ^/ t. _8 G& x) M
m_pRecordset-&gt;MoveFirst();///移到首条记录
# K. ]( ?! p9 D7 dm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
& C/ U+ o2 k; w9 k9 }///添加三条新记录并赋值
, H% G; z# ^' P# A! nfor(int i=0;i&lt;3;i++)
# k; }: n5 ^. s{
7 o& r' K+ U/ D+ i/ A8 z# K" x) D   m_pRecordset-&gt;AddNew();///添加新记录
4 O" U6 f1 b- c, u   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
2 b4 K  I6 o7 x+ I- k" S6 r1 J   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));7 M3 Q2 W3 g" p9 p% s- y+ o+ W; K
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));  l" F$ I- s, k( {% R
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
: F( E7 f) ?0 U5 }}
' T' ~9 Z/ J8 Q$ t0 R" om_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
! e  n: b1 J. ?m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
- |2 D3 i7 e4 j, |m_pRecordset-&gt;Update();///保存到库中    3 Z- F3 ~9 E3 ]1 Q
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 1 L! g9 g- [" E0 f6 N
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
0 v. l  }- V8 @3 n9 f0 l, `2 c; Y{! b+ x: f9 a1 I3 X' i
   //执行Select 语句
# |1 ^, k6 k' q2 n( k/ j* ^: q   BSTR bstrSQL = strSql.AllocSysString();           & Y1 Q9 P  l6 h' y- M8 ?
    try
4 z5 |1 J- f  y    {. n) O* R- t( O. j4 f3 B
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
: M( f8 u& B- v+ ^# p8 x1 {           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句2 L! N( M' s8 b6 r" j0 B
    }
2 \4 E4 [' O5 u( }9 s    catch(_com_error error); y& y4 m- s0 X% T+ s
    {
, h% Z1 o$ t" u       CString errorMessage;
. L' G+ L8 H- k$ ?; {+ w* j+ p- H       errorMessage.format("%s",(LPTSTR)error.Description());% |: O6 b: ^2 y" _5 d  p
       AfxMessageBox(errorMessage);
! ]: H  q; D" q" W$ L    }! ~" J) S6 m$ s! b) z5 ]
}        
) A' N. n4 m. y* i9 }//出错处理:
1 S8 X2 L/ j1 a. D1 {3 n3127——没有找到目标表+ F  b# D9 O' A2 w- |" q
3092——目标表已经存在
3 i; ~  f) d1 x6 b* C( l; ^例如:
+ A6 g+ c9 b. h- B! u! v9 r" y+ Bcatch(const _com_error e)6 @& |, K( D2 ~+ S
{
3 ], j% M2 g5 B. e) V    AfxMessageBox(e.Description());
. q6 ^2 f  I0 O. d1 h) V7 V4 b0 A    long errorCode=e.WCode();1 r6 `( c% O* \  D
    if(3127==errorCode) AfxMessageBox("表不存在");
2 N9 N/ C0 r) R1 f& e2 _+ S    if(3092==errorCode) AfxMessageBox("表已经存在");
1 b. \, r, [  ~- u! [$ [, y/ _! u; l6 H    return FALSE;/ l  A- e" S' w# \+ j
} / g% R+ H& Q5 i! S  R! u+ V
& Q! I/ q2 h, {7 F* c* F
</TD></TR></TABLE>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!
wangyu249        

1

主题

3

听众

54

积分

升级  51.58%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-17 21:56 , Processed in 0.371399 second(s), 57 queries .

回顶部