QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3613|回复: 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%">9 |7 B8 T& c4 v( z; G* M

# T; {+ @# M# i# V0 d<TR>2 s" `% L% s8 O( k$ q9 c
<TD vAlign=top width=32></TD>4 Q) n- c8 W: J3 p) _
<TD  vAlign=top>5. 记录集的遍历、更新1 Z! b) h- L2 {1 F' V
  g( S! H6 O/ B, h
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
& I7 m# }- _) s: _以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,1 t6 S  t, w- j
更改其年龄,保存到数据库。 1 l% ~4 y+ k+ G  O' M# Z. I; @
_variant_t vUsername,vBirthday,vID,vOld;
& e0 M7 }- @2 v5 A' `  c_RecordsetPtr m_pRecordset;8 r/ ~# x) D' \3 E
m_pRecordset.CreateInstance("ADODB.Recordset");8 D; C6 H1 T+ ?  C3 r* y( C/ x
m_pRecordset-&gt;Open("SELECT * FROM users",' }7 m" R2 Z( Q6 e
_variant_t((IDispatch*)m_pConnection,true),
/ F- G- @& e/ L$ e  W& g! J# k" l adOpenStatic,4 d' X0 B8 o8 m7 K: B; e
adLockOptimistic,' A9 ]( K! L* h' y4 O8 Y7 ^2 V
adCmdText);: I4 @% a! }" G0 K7 _) k, a* \
while(!m_pRecordset-&gt;adoEOF)2 h0 k0 U* X9 _, h1 m
{
; l& H$ J4 n% @, s9 S   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
/ n' D9 N: ?/ M7 J   ///你也可以直接给出列的名称,如下一行
4 r  @/ F7 n: s6 I% ], n" w   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值' r$ I* ^$ `& X8 C: c
   vOld = m_pRecordset-&gt;GetCollect("old");
$ |4 d, n' U' V" \   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
- c% [1 Q1 w5 I1 x; t0 i   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录) I( h/ k+ ~' B0 d3 n8 Y
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)- @  R' X6 c) C. H2 E6 G0 C2 B# R
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",& ~* x. c6 t& e% Y
vID.lVal,
, o* z7 N# B4 I6 d (LPCTSTR)(_bstr_t)vUsername,, u0 Q6 \1 b) A% u6 _
vOld.lVal,  p. c$ a! V, {+ i
(LPCTSTR)(_bstr_t)vBirthday);% a$ R" u* n- v1 g8 v
   m_pRecordset-&gt;MoveNext();///移到下一条记录
  {0 O$ I7 L2 {( O2 o4 L0 I}, M3 P: o6 V9 T0 V( D/ [' h5 K$ B7 U9 F
m_pRecordset-&gt;MoveFirst();///移到首条记录9 S& O, z  N9 R3 m7 R2 J
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录" U. ]: q# @" R( }4 b5 X3 X
///添加三条新记录并赋值8 @. a8 m" P; [' o
for(int i=0;i&lt;3;i++)2 M" g% M# _5 g3 Q! x
{5 R' U+ S! T  t4 M9 f7 _/ m- K  `/ \
   m_pRecordset-&gt;AddNew();///添加新记录
; |0 ]0 D- e" \6 W1 t   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
1 u/ C6 P; F# L0 K) c   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
2 }; @5 V' o3 [7 Z% U   m_pRecordset-&gtutCollect("old",_variant_t((long)71));1 B: D( A- m: w' H8 ?0 a2 ~
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));# |2 k2 @" P- j# U% L
}
% K& ]0 i1 S3 L  l: a( E9 f8 h0 Jm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
# R! I* \5 W" ym_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄4 V0 y& y" a* r* D
m_pRecordset-&gt;Update();///保存到库中   
7 J1 J4 G+ O2 j1 S备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
% y) b2 u$ F" k$ P4 K) o' k2 v' Lvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)4 k6 M/ [$ J0 ?  v" g: Q
{* R# x. \0 H  x! n/ M  ]
   //执行Select 语句+ c  C9 ^9 T8 F( T
   BSTR bstrSQL = strSql.AllocSysString();           
6 w/ D; E, ?& x1 K9 g( o! g( Z    try  O# S: K$ k( `! E
    {
- w& S4 I" k8 w8 z$ b       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); $ k  T! o4 i5 \" H& a2 @
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
: }% T+ F6 z" ?- E! g$ ]5 l9 z4 ^. p    }
2 Z  B, j' ?' j+ I- }' {0 q8 G    catch(_com_error error)
5 s& W0 U* x8 n* Q3 O- T# w    {2 P  m+ W7 M+ t) C3 Q( _$ m
       CString errorMessage;
; `1 J- I' ]; q+ p, C) j       errorMessage.format("%s",(LPTSTR)error.Description());2 D9 V$ U, ^! U7 E
       AfxMessageBox(errorMessage);
! Y9 m9 {; J9 {, K' j1 s& y    }
% ~7 k4 l8 i" H& m$ S}        
7 p, b( x* ]  T* z* a//出错处理:% H- L9 K6 i9 u( Z0 \: j0 {, C
3127——没有找到目标表3 l/ S! s; I" x/ ]( k( g
3092——目标表已经存在
: \( v* A) i0 p' |' T例如:( M3 C  M0 t% n- h. l* P
catch(const _com_error e)
: K8 f5 u, u% ?' m/ p9 r/ k{: M8 C9 U0 j0 s" D4 c  b
    AfxMessageBox(e.Description());7 P& w: d* }5 D
    long errorCode=e.WCode();  A$ f9 |8 d) d. k; h' v8 L. L+ v6 s
    if(3127==errorCode) AfxMessageBox("表不存在");
/ ?  u, ~/ R' g% p! X    if(3092==errorCode) AfxMessageBox("表已经存在");
$ Y! R+ `# C- R0 L, y* e3 |% }    return FALSE;; R9 Q( P  I5 S- q8 O) z# U0 O; l
}
" z8 H" a) w1 O0 v' n3 n( k. }. L6 R. c. Y
</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 15:38 , Processed in 0.421761 second(s), 58 queries .

回顶部