QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3645|回复: 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%">( P2 b4 ]/ r4 `- X+ A

7 h& s3 m6 _* C% Q" x' h<TR>2 O+ ^3 r% C! y* U; T
<TD vAlign=top width=32></TD>* U$ g, `4 j6 U3 P
<TD  vAlign=top>5. 记录集的遍历、更新% C; T4 m2 t" j! x/ E
/ Y$ N! C$ ^9 B' O/ q5 l) l
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
* o$ S  |4 Z9 Y: x# o以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
2 g7 |! S! R2 U) A' F更改其年龄,保存到数据库。
( M9 R5 L7 \! }* C. \  y5 {_variant_t vUsername,vBirthday,vID,vOld;
) P+ }3 A5 r: C$ z( U" {_RecordsetPtr m_pRecordset;
# f* Z9 \  C1 y4 e* w" E5 d" Xm_pRecordset.CreateInstance("ADODB.Recordset");
4 d4 x$ n  N" bm_pRecordset-&gt;Open("SELECT * FROM users",5 E3 u2 X2 ~) _7 U
_variant_t((IDispatch*)m_pConnection,true),
" R& a0 \" [: P. y, b adOpenStatic,7 d1 d* N# P. u; |
adLockOptimistic,7 N! T$ t( z8 l3 {6 }/ e' ?
adCmdText);
6 R5 P# p' k) E: a0 y9 Jwhile(!m_pRecordset-&gt;adoEOF)/ y7 G; y% M& e3 T2 {# f2 A
{* C* C& L' ?, @6 F
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
; ]9 S, ?0 i& X& W2 n   ///你也可以直接给出列的名称,如下一行
* A8 h; F/ T1 D+ c) i7 X   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值7 {4 s) Z4 i% m1 \
   vOld = m_pRecordset-&gt;GetCollect("old");: l& g! q$ ~! t, \- s" m
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");' e& p& R- Q' v, M9 B6 o/ W
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
) m% K9 I) h- i% }* k1 \0 }& P5 Q+ w$ Y   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)+ s& A) x" O. b* Z( d  P6 O: L
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",/ H9 F+ f5 d" [3 y0 Q9 D* M
vID.lVal,
' m* q" o/ _% A (LPCTSTR)(_bstr_t)vUsername,
2 x) u/ S' Y$ O3 i& r! _4 z0 F# J vOld.lVal,
# d# ^. U; U1 @' m5 M) g (LPCTSTR)(_bstr_t)vBirthday);* p$ y* r' U( _- Y8 y
   m_pRecordset-&gt;MoveNext();///移到下一条记录
" w/ Q4 ]6 e7 P5 x# k, c}, C; b; ^. Y3 s4 ^
m_pRecordset-&gt;MoveFirst();///移到首条记录
! Z, I- ^6 r# rm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录8 _8 I2 I( z* T* S! n
///添加三条新记录并赋值
  t* A1 `( n4 ^6 Z3 |: s. W6 \for(int i=0;i&lt;3;i++)9 o5 D% A, r: T; E
{5 m" g; ^$ R  B
   m_pRecordset-&gt;AddNew();///添加新记录
! Q9 V' C& k5 r! w* S   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));/ Y. `" w9 P, T+ U& ?) H
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));% Y* ?) h9 ^$ R* Z& ]
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));9 G) S  u7 ~8 n) X/ |# Y
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));# d  e# t/ ~, B
}, [; ]7 _! Y, I; p4 B% F
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处: V) ~! r/ {8 V# r0 u
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
( J; W  H2 Q5 F5 H; Hm_pRecordset-&gt;Update();///保存到库中   
1 @7 Y! z6 K2 T6 Z4 }: S: ?5 M备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 ) c* y# j0 M0 Y; @; s& x1 [0 X( _
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)) r2 {' s4 i! p, g- ]' o7 K
{* m  ]5 _1 w' M7 V
   //执行Select 语句) ^0 y, \6 t4 r9 Z) m7 y* Y  s
   BSTR bstrSQL = strSql.AllocSysString();           
) _0 r- D( ?/ t- {. J1 b" g  `    try( M# O4 x) X1 v5 ]' D$ [/ i
    {8 ?% ~; B. w  T7 P
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); ( l) g1 q. {' j9 R
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句1 S" |" O$ r: K$ {& J1 Q' `
    }
* i4 |6 Y) @9 J6 K, R0 t    catch(_com_error error)* c  f8 ]6 m) J9 k6 J
    {$ U% F& f* H9 v! O+ Y
       CString errorMessage;
6 s( O- `8 b" P/ M# u/ O       errorMessage.format("%s",(LPTSTR)error.Description());
/ L% Y! c: V7 H, [/ g" q       AfxMessageBox(errorMessage);
) }; ^5 e- u6 v$ N/ }    }4 ?' s: j3 E4 M5 S) c
}        & J3 Q! M: ?; s9 I
//出错处理:1 c, e7 F2 Y, L* i
3127——没有找到目标表
" U; `7 P, o  x; G1 u# H3092——目标表已经存在
* \) }4 `8 F* O/ L8 \# _( V例如:/ l) a/ o( @" G  u: l  C: h; c$ v
catch(const _com_error e)# E7 V1 `- n* J  R$ g- F
{. \) h* r9 x; S# `
    AfxMessageBox(e.Description());
/ W6 X0 G; P( H- Y) n    long errorCode=e.WCode();
" L6 S: {* O! v( a' V) d, j2 I    if(3127==errorCode) AfxMessageBox("表不存在");
5 S! q! q1 P- u. T$ Z# ~    if(3092==errorCode) AfxMessageBox("表已经存在");0 j4 X8 R; F/ R7 U8 F5 y
    return FALSE;
1 p) B3 B% l2 G8 W( r) L} 8 T+ N4 i% E* g+ U  E

1 b4 T" e6 X8 l6 h. G: }" 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-7-20 06:07 , Processed in 0.424284 second(s), 57 queries .

回顶部