QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3361|回复: 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%">
* _% R6 \  b4 v/ r9 E, L& S
" ~: h0 b. Q8 S- \# v  S# v<TR>  f0 F5 G- A4 \- [1 T; P8 u
<TD vAlign=top width=32></TD>
. ?( |" v( q* Y# a, J) y& X<TD  vAlign=top>5. 记录集的遍历、更新- _9 m6 d9 n! R' D9 S% Q, ]

, ^. Y* b& _  @1 O     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
: R( n* p' B1 V. p以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
4 L) K8 X( }4 j: @/ C' e更改其年龄,保存到数据库。
! ?) v; m; q' T* T_variant_t vUsername,vBirthday,vID,vOld;
0 H! Z$ u& U; j3 m_RecordsetPtr m_pRecordset;0 c  ~6 f0 D1 ?8 I
m_pRecordset.CreateInstance("ADODB.Recordset");& T' p% Z0 ^" ?  N. Z8 m
m_pRecordset-&gt;Open("SELECT * FROM users",$ a/ \. q. _+ F3 n$ T
_variant_t((IDispatch*)m_pConnection,true),% B! W, w) w9 R! m
adOpenStatic,' B* V8 H5 t7 C* _/ [. M, a0 U0 g
adLockOptimistic,
4 Y: q. ]6 Q' ~: p0 R& R3 t adCmdText);
7 t- G  @' G* e; ]" |0 C$ Wwhile(!m_pRecordset-&gt;adoEOF)* h; H. @5 \! f
{
& l2 p4 V% I& B' i+ P) K   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
3 ?# a; Y4 V! o6 v+ r' C4 }( W   ///你也可以直接给出列的名称,如下一行/ `' Z# Y0 G+ e, H4 Q' ^; h7 s/ b
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
5 N' j( [0 |+ e3 c! w& C   vOld = m_pRecordset-&gt;GetCollect("old");6 x* q( K5 u) E- z$ K) i* ~4 Q& N
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");) Q* B  j" t$ k( V, e% ^
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
: N% v- \4 z( D$ A! R; h   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
, i: F" ]! P3 Y0 L8 p0 L# Y       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
9 b& r6 q. b$ z vID.lVal,
0 A* ~, `7 F1 \$ r- [; G1 T: p (LPCTSTR)(_bstr_t)vUsername,
1 F- d4 |* L" }0 T, t4 D vOld.lVal,) j; l0 s6 u8 Z6 Y! R. ]
(LPCTSTR)(_bstr_t)vBirthday);; o4 P9 M, b. s' i* j, q0 P8 q
   m_pRecordset-&gt;MoveNext();///移到下一条记录
$ G: K0 Q% `" N$ b}
- F  m4 H- Y  x: y  Zm_pRecordset-&gt;MoveFirst();///移到首条记录" `5 d: U! ]: D5 A1 f( H) O
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
! f* }( K3 ?, P! f0 {///添加三条新记录并赋值$ C* H' V3 a3 ]. j9 @% x
for(int i=0;i&lt;3;i++)( c( I' i: w( K: z7 b( \
{  a1 r( e) u0 i0 I8 o
   m_pRecordset-&gt;AddNew();///添加新记录
! M4 r: M, T' g' h' R   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));( b' V) `4 ?9 l; A7 l" B
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));% i8 Y/ X' }: \; X
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));! ?- K6 w$ K4 j, N4 g0 t
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
+ z" Y1 F! T, |9 P$ N}
$ {. }# z( J; q$ Z, G) rm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处- G, r# M$ {' v/ ?$ A, @* u7 P
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄; Z" T3 C, x. N/ U7 B. }. i" G" {# ?7 c
m_pRecordset-&gt;Update();///保存到库中   
  w+ T5 z7 a! K. f9 ^/ [5 R$ a备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 ( Y. @# L4 A5 v3 d( ^' O. B- r0 x
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)6 c& V# {' U, `8 `9 e% Q% M& ?
{7 ^( V8 B! ?/ A$ X/ ~0 l
   //执行Select 语句( v7 i6 K% p( |' C4 J" F( o
   BSTR bstrSQL = strSql.AllocSysString();           / F8 P' _+ W3 e; f- v
    try/ ?9 ]9 ^- a! g/ e# p
    {
& K/ d- C* C9 D+ B- f9 M/ F       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); # _6 R( R( N7 O9 F' ?
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
: T5 B' W6 g; z1 a; N    }
+ B$ I" j3 X6 O7 A. ~/ |! B    catch(_com_error error)  O3 O. z7 ]% q. M
    {* i* B$ a; a3 z  Q. ?) q5 Z' e
       CString errorMessage;/ P  W' |  k# g* x! A. G/ c+ O
       errorMessage.format("%s",(LPTSTR)error.Description());
4 ]' z4 D# V  t- f  H- O  O7 A% W       AfxMessageBox(errorMessage);
: q# c! M: d, ?  }9 O! ^' G    }
- o0 l: ^& N* n( a* i9 L5 C$ ~}        ( D, |4 V! m  d& Y5 g
//出错处理:2 O9 G, l/ l( Y7 V5 G9 J9 @& }
3127——没有找到目标表
' Q4 o& S+ g3 W7 R% h7 L3092——目标表已经存在( W3 i6 F& }! D, T3 i& ~; t
例如:
; a: Y% z/ _3 _: Tcatch(const _com_error e)
) M) P" `+ L. K8 ^) s2 e{1 G- _+ [' g) D( h3 F
    AfxMessageBox(e.Description());
+ c1 y* h! i6 M+ Y( d+ q0 J! _    long errorCode=e.WCode();( Y/ P, a/ T, c- R! W6 O& ~2 T' r
    if(3127==errorCode) AfxMessageBox("表不存在");
% l) R! x2 ~+ H6 T: p# O% k    if(3092==errorCode) AfxMessageBox("表已经存在");  b7 N/ |* q- j# Z3 H
    return FALSE;
: m. f: t% o! z5 {# J1 ]} 6 ]  `0 w/ E1 l0 s* O+ {* b) z, b

2 \( J) a4 W$ v* b. v7 x6 i% n$ l</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, 2025-7-26 05:57 , Processed in 0.507782 second(s), 57 queries .

回顶部