QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3610|回复: 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%">
. q0 o; `- J% ]" a3 Q, R
; j+ |* r3 T8 s$ r5 Q1 I<TR>4 s# h" {! |. G& {/ P
<TD vAlign=top width=32></TD>8 G) @5 F& J+ x! x: u) x
<TD  vAlign=top>5. 记录集的遍历、更新3 q! S: ~. f* T* x" t, V
, q  Y2 i. E& V- v! y$ ?; l4 J
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday4 e; {; q' ^) i" X  R5 V
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
+ {4 |& R! _' j; M" a: }8 {更改其年龄,保存到数据库。 # F) Z' V$ O; I) T
_variant_t vUsername,vBirthday,vID,vOld;
4 [: C% S8 v9 Z* T# J0 h5 \_RecordsetPtr m_pRecordset;) L+ i& n: I2 w8 p
m_pRecordset.CreateInstance("ADODB.Recordset");
2 `4 w$ E; m, c9 I" E' h+ ?m_pRecordset-&gt;Open("SELECT * FROM users",
; S# s% n& o8 E( O' \ _variant_t((IDispatch*)m_pConnection,true),
2 s" ^( B/ p/ ` adOpenStatic,
1 `/ h2 c  C4 l4 z1 I8 A5 z6 ~ adLockOptimistic,5 O6 S2 g( @  x: s' [* h0 B
adCmdText);
; n3 G: O1 V3 C% }. t: Awhile(!m_pRecordset-&gt;adoEOF)* K0 n+ z" n% c1 F" ~
{- P" f# `' Z7 |
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,. Z/ C" C" {3 R* v
   ///你也可以直接给出列的名称,如下一行
( N) w/ c3 i0 _& v" h" U1 ~   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
2 b& m/ X9 C, L& u3 @* P" b   vOld = m_pRecordset-&gt;GetCollect("old");
( C$ m3 ?* \5 T3 w" o* i   vBirthday = m_pRecordset-&gt;GetCollect("birthday");3 s, _9 q6 e# }6 h
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录6 k1 b% Z% \% y: i# ]
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)" k6 I" k' v$ z4 T) k3 K
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
5 R+ g9 y% T9 `2 U4 Z5 V/ Y vID.lVal,
1 j, i2 [6 ^5 n. _3 u (LPCTSTR)(_bstr_t)vUsername,3 o1 u+ U" V8 e$ [- {2 r
vOld.lVal,) v0 {6 ~* c: ~+ G
(LPCTSTR)(_bstr_t)vBirthday);
) ?( I: q9 [- M. y* H$ L   m_pRecordset-&gt;MoveNext();///移到下一条记录) p) ]" d( z2 n3 w: B4 q* [
}8 g- i& d1 V4 t) R
m_pRecordset-&gt;MoveFirst();///移到首条记录
5 _) e2 L3 p/ C' s' Y) n8 Rm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录5 w( O* a3 e; m7 {& x- N
///添加三条新记录并赋值+ l$ Y* S% Y  Y6 ?3 t; e
for(int i=0;i&lt;3;i++)
5 r, p' k% i4 [! v6 W{
/ R+ v7 L: k/ O( r   m_pRecordset-&gt;AddNew();///添加新记录
/ d7 H( \( V( Y6 L; }7 n   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));. K2 \0 F( h6 e% R4 V+ T
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
/ }8 h5 n4 X! a5 J   m_pRecordset-&gtutCollect("old",_variant_t((long)71));# K: R# x- e4 d( r9 M( [# n
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));/ w0 v8 K( {4 n7 P* R
}
; w0 `; X7 M) t  T5 R$ mm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
" Z0 v" O9 U& X" B3 Y3 Bm_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄( B. f0 a( l$ G8 I$ K3 C
m_pRecordset-&gt;Update();///保存到库中   
  W3 L% W2 R# ~5 |8 j. q0 J6 O备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
! [- E7 e# X" Z% i( U9 f5 Cvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
6 r2 I: l8 X8 b{
- V4 ?% f" [! j8 ]$ z6 a   //执行Select 语句
& ^, D5 S6 I! W2 w! C$ g  k   BSTR bstrSQL = strSql.AllocSysString();           
9 c: B+ M5 A4 L( [8 ^: `: U' n    try2 i, [+ b9 q3 x! Y. |- i4 Z
    {
9 a5 d2 R* x' o  ^% l       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 6 @5 v* h1 T9 I) n6 @
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句3 a5 E3 D) G, d8 U/ g: t8 w
    }
; ~( w+ V! F3 y- F4 W    catch(_com_error error)
) D. D( e8 Z% q2 J8 L    {
1 I: d% E4 K1 J3 \3 A       CString errorMessage;$ l1 h$ p2 v5 Z+ p4 q0 H1 V
       errorMessage.format("%s",(LPTSTR)error.Description());6 W1 B: v6 D' f& P- I5 a# [
       AfxMessageBox(errorMessage);
- P6 ]# d% b9 n, W6 P    }
0 J, x7 N) b4 s' k}        % |1 a# G! u5 o4 A
//出错处理:+ n0 \# s$ n1 V5 }8 Y+ q* p# U
3127——没有找到目标表
5 H! m4 U* x$ z1 D' d1 b8 k3092——目标表已经存在: K) `/ v5 z* |; {8 v9 g
例如:' }$ l6 o$ E  R  t+ D* Q* M6 p
catch(const _com_error e)1 k7 u: V  P) O- g
{% s& ~& p) n' e. f  o& W' k% Z
    AfxMessageBox(e.Description());2 p1 o  L* R3 h9 f5 O- y7 @
    long errorCode=e.WCode();
. o4 R$ a5 q) n* B( o; D; m8 v    if(3127==errorCode) AfxMessageBox("表不存在");8 Z+ n) A: }5 {- w% }0 Z# j2 Q
    if(3092==errorCode) AfxMessageBox("表已经存在");
/ a' S5 X$ [2 D8 [& g    return FALSE;
7 `3 B& ?! P5 X0 \* I} 9 Z* v/ C1 e. U' _3 D+ ~8 }

8 v8 Q. E) n) \</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-6-3 13:20 , Processed in 0.344261 second(s), 58 queries .

回顶部