QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3578|回复: 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 g$ ]% A5 l% H( w$ v
% R5 x9 o$ ?8 \* X  D% W
<TR>3 G4 Y, h$ O5 k5 }
<TD vAlign=top width=32></TD>! u2 Y% u9 a- X0 F4 ~
<TD  vAlign=top>5. 记录集的遍历、更新
. W7 R3 a0 o. {$ ]1 e) k" {! ^7 w2 k3 ~$ g% p1 \
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
) Y# u! o5 m0 c以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
. l4 N" n. v9 X) h0 a更改其年龄,保存到数据库。 ' y8 H- E( \% i4 F+ U2 }. \
_variant_t vUsername,vBirthday,vID,vOld;
* z1 ?+ Q9 w  a1 V+ r5 q_RecordsetPtr m_pRecordset;
& j3 P! K1 W+ n" ~( s$ Z, d4 tm_pRecordset.CreateInstance("ADODB.Recordset");' m7 R  u$ X! |2 ~  D7 H7 a" h" A
m_pRecordset-&gt;Open("SELECT * FROM users",( D% [% I  e: a7 S1 Q1 K
_variant_t((IDispatch*)m_pConnection,true),: \, o) s" z0 b. ?5 y
adOpenStatic,& r( u! S1 N' M! Q7 W9 p
adLockOptimistic,
1 p& q/ p% \. Q0 f% z9 J adCmdText);& z6 `/ Z' @  X( B, M
while(!m_pRecordset-&gt;adoEOF)
$ m6 y& [6 o$ s( S{4 }7 m, D' C0 \4 y! ~
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
  @* Y9 D7 q9 w" n   ///你也可以直接给出列的名称,如下一行6 f2 W! A& O- O5 a1 [1 [
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值: b/ n% b( W" T. y! d3 Z7 t
   vOld = m_pRecordset-&gt;GetCollect("old");
9 N: s# h# z/ L; i0 N+ f5 d   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
- h$ s- O$ I8 m* T/ P   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
- \+ N5 w3 V8 A; ^3 w1 Q; G   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
. \1 u5 f+ }/ O+ U( E, F       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
1 u3 ^! s5 J' D4 w vID.lVal,
! H: W- x4 E& _4 y3 ] (LPCTSTR)(_bstr_t)vUsername,
" D5 k9 P6 p( e8 H( Y7 [8 M vOld.lVal,
1 I6 m; b; h: I0 w9 V) ~8 ?; x (LPCTSTR)(_bstr_t)vBirthday);  i+ G- ^" }$ K2 @/ h
   m_pRecordset-&gt;MoveNext();///移到下一条记录
: m7 E* P) y3 U# X1 h( x}, N0 ]7 w0 i- p$ i
m_pRecordset-&gt;MoveFirst();///移到首条记录. |# q3 |* e) `- b, y6 C$ _: J8 |: v
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
: \1 L$ Z  m4 f* o! a& e! Q) n///添加三条新记录并赋值
: u0 P# g# ?0 Q7 J5 y1 u8 l) `for(int i=0;i&lt;3;i++)
) d) ?$ z3 `- r8 t0 I1 H) x{8 B! Q1 d& I; k. T3 Z0 K1 U: B
   m_pRecordset-&gt;AddNew();///添加新记录0 E" N( m7 n) j* q& b1 a, a
   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
& U+ m! y3 c& O( O   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));- H7 I( z  d- d- g
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));( S! p  Z2 @; T  k
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
  b( Y# ?' j. m* `4 b}3 o/ U( F9 _: i& f, \5 R% j) w
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
) s0 l+ X  ]% w( t. y, |m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄( s3 r' h. U3 P0 T# g
m_pRecordset-&gt;Update();///保存到库中    - w- o( K" b% \& M4 x# ^) W9 x
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
$ D4 M+ P! B. b5 B% u0 Dvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
2 @. ]4 R( S3 c2 o; L! ^* T{# e: ~: n7 }& O4 }
   //执行Select 语句
6 l; P7 m. H" q5 p/ I3 t: n* [  `   BSTR bstrSQL = strSql.AllocSysString();           
' M4 J  s7 }5 y6 j, f0 O8 H    try
+ j; i6 {! w+ y    {: n" M# p% ^! c3 A
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
$ K* x3 S6 Y: s$ ~" [           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
/ I+ o5 p$ v( o    }! }% w" x8 r2 N9 V
    catch(_com_error error)+ m+ @& J; b, j+ C" K
    {( d8 ^# p  W( |3 E
       CString errorMessage;3 z7 t  c2 b+ x+ V! b! K( s
       errorMessage.format("%s",(LPTSTR)error.Description());, W& p. K6 `* }; a# H0 [
       AfxMessageBox(errorMessage);
6 b5 G- H, h& G! {    }
7 o1 m: h' U2 k3 d$ L. A. m}        , X) [) H# s) S3 Z- O
//出错处理:
+ j/ v( H7 m5 i# P; X3127——没有找到目标表2 \, E. t6 O: f! V6 T% f* ^
3092——目标表已经存在7 ^  r! h, z3 [: h
例如:% o3 t2 V# x8 F8 b
catch(const _com_error e), O! k! k- X3 R# S8 e
{
. e: G) f- S! ~5 e+ u2 L) n    AfxMessageBox(e.Description());
" w/ W# V. v7 e5 k" o4 `& s# ^    long errorCode=e.WCode();: H3 Y. x* L( z$ v6 t- T
    if(3127==errorCode) AfxMessageBox("表不存在");. L, g1 ^) q" M. ]8 U. Z- ?
    if(3092==errorCode) AfxMessageBox("表已经存在");
9 N( ?2 p" H$ ?3 o8 D- @1 R/ ~    return FALSE;
' M* Y3 c1 o. T9 y0 H: ~} . U" R8 U- E- C( k) x" O9 W1 ]
4 C- G$ I4 v7 ^" j: _! q
</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 20:13 , Processed in 0.398083 second(s), 58 queries .

回顶部