QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3612|回复: 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%">
+ K$ g1 |$ I9 U/ t' Z& H5 I. v' p! }; \, r
<TR>
. @* m9 a1 ]2 k. d8 H; `<TD vAlign=top width=32></TD>1 D  O1 g- p" D7 i7 }; {# `
<TD  vAlign=top>5. 记录集的遍历、更新! {- W/ ^1 X/ _
4 m7 f: G- ?* d, `. m* f3 }
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
  y: x! w! t: Z2 g- P+ a: `以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,0 F" R, |0 e* E: [- b0 V- i
更改其年龄,保存到数据库。
2 h: D# D1 M# w! T_variant_t vUsername,vBirthday,vID,vOld;
4 n5 ~& F7 J+ f/ f& \! y_RecordsetPtr m_pRecordset;
/ H. p  A" s; y$ n1 a( em_pRecordset.CreateInstance("ADODB.Recordset");; E9 U6 y$ B. F! P+ R+ g
m_pRecordset-&gt;Open("SELECT * FROM users",, {* ?/ F! `' H" v7 j2 E$ L
_variant_t((IDispatch*)m_pConnection,true),
9 u' o1 K# a  {3 j' A+ A  P5 I adOpenStatic,
- \6 p. q; R2 y; N/ L9 e6 p adLockOptimistic,
+ I$ j( ?  s: @' X' r* F9 U5 e6 ^ adCmdText);- H0 c( B: ]. F4 W& D+ y, f# m" o
while(!m_pRecordset-&gt;adoEOF)0 r  ~5 l% |( t/ u- \# b
{$ T% b) Z1 u- z, Q
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,. l5 D6 q  H" I6 [
   ///你也可以直接给出列的名称,如下一行
4 _, c+ T; ?" ?: D( F0 S5 ^   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值$ x0 Z8 n: r' d& P- O+ t; h
   vOld = m_pRecordset-&gt;GetCollect("old");' a* K4 ]" D1 X/ i" z
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");5 }% Q. v" `. `  d' E1 J2 @+ a
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
! i& o( T$ d- g# {: D& O, L" e   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)9 W6 D5 A. _  Q" w& s* s
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
+ ]# c4 o5 d' s vID.lVal,$ ]* [4 t' K1 V$ ]
(LPCTSTR)(_bstr_t)vUsername,9 S8 r' \6 ~% [- ^7 l% X
vOld.lVal,: A8 O4 H) t' g  _
(LPCTSTR)(_bstr_t)vBirthday);
$ X( F: g6 r; d' O8 e9 L   m_pRecordset-&gt;MoveNext();///移到下一条记录
7 j1 n9 [+ O. D}# u, D2 }  j4 k# q/ X+ i
m_pRecordset-&gt;MoveFirst();///移到首条记录) _( K  J& M' |+ F5 d4 ^1 O
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
2 C$ n/ |) ~( o6 B///添加三条新记录并赋值
4 E4 t4 k/ I2 p6 Pfor(int i=0;i&lt;3;i++)- h- W" w  L% C% z
{
8 A/ l) Q9 m/ }0 C4 L" v   m_pRecordset-&gt;AddNew();///添加新记录
0 Z; m0 h- b2 J0 n2 O; j# z   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
; j( y- _1 k# ?# ~5 L   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
& `3 U$ J. N: Q  g6 Q9 v( f   m_pRecordset-&gtutCollect("old",_variant_t((long)71));
5 n1 m1 U, X9 }6 J2 i   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));8 x. f8 M6 ^9 a: [
}
' W8 B  T3 X+ l% g9 S4 Nm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处, ]: b" K+ |1 q: |: N: X
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄9 R7 f6 _3 R+ \& C, T0 b
m_pRecordset-&gt;Update();///保存到库中    6 I  r. K5 f! z6 ]1 c8 C  ]5 d
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 / O! Q  {  k" ~. z! h6 Q% V( s( E
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
# Q: Y( [! l. o/ C4 R{
) y8 ~( o  ^# H8 z0 @6 Q   //执行Select 语句0 ]$ N3 I6 u3 z6 ~3 c+ t1 P2 _
   BSTR bstrSQL = strSql.AllocSysString();           7 s8 o6 \% @& G8 I0 o
    try) g. b. D  Z" e0 s
    {
* @( b+ ^) @9 n! b4 E       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); 6 G; {% g' C3 L+ h
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
: x, H5 }$ Y8 V4 Z& ~' K    }
6 }% S+ E$ D9 h( d# I- t    catch(_com_error error)
) j7 E# G$ ]; J% t    {- e8 [! O" H( L8 b
       CString errorMessage;2 e+ E" Y& }" s  R
       errorMessage.format("%s",(LPTSTR)error.Description());3 W0 H, {' q  I0 n  h
       AfxMessageBox(errorMessage);
4 S) F# y( B3 V# T9 z    }' T4 T1 a& X% e6 n7 w% i2 ^) O6 s4 X
}        5 s- t5 C/ ^7 h6 K" e5 b, _
//出错处理:- j: f. x1 S7 J; o0 Q
3127——没有找到目标表0 n$ l( W4 i9 F  b& E0 ?
3092——目标表已经存在
! E, J! E. b: Y, L! R) d例如:
8 J1 D$ g: ?  s8 N+ Icatch(const _com_error e)
0 H1 V+ k0 n# D$ X3 ]  y{# k! T' q9 ^) j: |# J. w8 d* ?
    AfxMessageBox(e.Description());
6 |+ H% E& C  W% I    long errorCode=e.WCode();# h( o! @2 D* }' C4 {) a) Z( M
    if(3127==errorCode) AfxMessageBox("表不存在");7 N  d1 @  S4 O; |6 u
    if(3092==errorCode) AfxMessageBox("表已经存在");
. w1 {8 x/ f6 f; ?$ F+ U6 _    return FALSE;' M- w8 u7 q' a4 `( L
} . m; r' x% u9 s  w
& c, k$ e- h# A: e. K* c: a
</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 14:37 , Processed in 1.085577 second(s), 58 queries .

回顶部