QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3637|回复: 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%">
* M# ]4 t/ l5 \  B  d" |/ |3 Z3 \; h' V; B! O, |, x# L
<TR>$ ^7 y; F1 v' p2 @
<TD vAlign=top width=32></TD>6 k1 b6 t4 K+ ^. |& D' _/ p
<TD  vAlign=top>5. 记录集的遍历、更新1 Q7 |' D0 h7 N' s  A6 V8 D0 @
& j1 ^+ n, ^( U& l* d
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
0 u3 b& _1 {2 l- R& H. Q' ~以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
, w  i$ y- E: `& u0 u更改其年龄,保存到数据库。
! [8 I# e9 c) E$ E_variant_t vUsername,vBirthday,vID,vOld;
$ o* ?# B& I# _) l8 r% v5 c_RecordsetPtr m_pRecordset;4 w7 f& Q; a0 o7 x) d
m_pRecordset.CreateInstance("ADODB.Recordset");
' S4 q4 j: A& E0 J) `m_pRecordset-&gt;Open("SELECT * FROM users",  h! }8 ~+ E5 @' h& \
_variant_t((IDispatch*)m_pConnection,true),
3 `: O( N9 L) o+ k! ^ adOpenStatic,8 e5 e) X- m' m5 j6 g% i/ l
adLockOptimistic,
. g( m" W+ m. N' P0 {  l- `" |/ J adCmdText);
. C0 }: y, F! uwhile(!m_pRecordset-&gt;adoEOF)/ _, l8 s' R. b3 A( p2 E) X3 n
{
( a' _9 y5 S5 f   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
4 X5 N. Y2 k+ k   ///你也可以直接给出列的名称,如下一行3 `' a9 m2 _" X$ }+ K
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
) x! i: S1 |# {3 ^0 P. D3 I   vOld = m_pRecordset-&gt;GetCollect("old");
  x0 X6 K2 r$ }; n* k) c   vBirthday = m_pRecordset-&gt;GetCollect("birthday");5 f  ^" R  B, M5 h
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
  N( S( `; P+ M$ M0 y% @   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
+ ^+ q+ }% j* R: x& X! w       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",7 Y. \9 K- G( B6 Y! g
vID.lVal,
) E7 m( A8 F- _" J (LPCTSTR)(_bstr_t)vUsername,9 w- J9 F. k% q$ ]# I
vOld.lVal,
/ N9 [& e- t. B! }& M* p& g7 U (LPCTSTR)(_bstr_t)vBirthday);
0 i* t" |+ c9 [2 _/ v# A- X   m_pRecordset-&gt;MoveNext();///移到下一条记录
% ~4 D# D2 F' H/ Y3 L}: u; m& X# ~: |
m_pRecordset-&gt;MoveFirst();///移到首条记录4 V' |1 N8 o) x! R! _
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
% C' B0 g9 y. m2 Y5 C///添加三条新记录并赋值
' p9 X- e1 ~' s- q' n8 S8 E9 kfor(int i=0;i&lt;3;i++)
8 [- e) V6 v, E# T$ ]' }{
) e: [7 n6 L) W' _$ t   m_pRecordset-&gt;AddNew();///添加新记录
9 ?  v) L: v/ D; y7 t8 s8 k. n' k   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
; r( p& f) t. {+ [9 `/ k+ ?   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));* x5 o; q! S, I; t" c' R+ x2 c
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));& \7 \: ^& B1 F
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
" X5 }6 j% p5 s  P7 A7 B5 }}3 [9 R/ r7 D" X4 t0 S. v
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
* n) j6 J* i0 e  z: D) B$ m& M2 s7 cm_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄! C" I0 F7 X9 g1 X7 j( v6 G
m_pRecordset-&gt;Update();///保存到库中    ' W7 s  Z+ y- K4 }, N  [
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
9 T4 H) x3 c5 {' k: }void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)$ r# W# E. R. Y8 X) E3 ~% \& Y
{$ y& Y0 a( ^0 U7 y1 J! V
   //执行Select 语句
. U3 e% Q- F* N% J/ @  J1 b   BSTR bstrSQL = strSql.AllocSysString();           
0 ?5 ?) e' |& q% g- e$ @    try
9 a. p# I! d, Z; `1 C# u! [    {) z. E% c6 s8 v
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); ! W* \- |0 Y' p! g0 t8 d7 ?
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
7 V2 C* u8 Y1 ^; g: j    }
$ n' s& G5 ^1 r% e    catch(_com_error error)
/ B! ^5 }  t; @. M3 e    {$ Z& l- X9 s0 n4 }. \* O
       CString errorMessage;
8 k, A: U$ D/ s  a! i       errorMessage.format("%s",(LPTSTR)error.Description());0 M; s' l$ F% H; n
       AfxMessageBox(errorMessage);' _$ n! _4 Q: b6 Q4 w
    }6 a# Q9 l; V0 e! Z# H! A
}        ) J. @4 M1 B$ V" A
//出错处理:0 m. F5 l# c' C5 x6 G$ T+ @
3127——没有找到目标表
5 N/ |. \" M1 k2 q3092——目标表已经存在
* N2 |3 P0 L6 N; V6 j2 [例如:
) `/ B+ C3 d  j9 n" i7 O9 }' }  i2 Jcatch(const _com_error e)
; Q. l' Y/ |, @7 P6 i7 l{6 B, P/ [6 o2 J4 q. x( B
    AfxMessageBox(e.Description());' b/ Y/ \  u, C3 M$ I% F% n
    long errorCode=e.WCode();
2 Y! X7 T( ~0 ~/ N1 Q    if(3127==errorCode) AfxMessageBox("表不存在");1 f4 i1 j: X; M3 m
    if(3092==errorCode) AfxMessageBox("表已经存在");
- i! q, ]/ j2 _9 M" p" d2 J: b    return FALSE;3 P$ j- E* K2 Y4 I% R3 n& Z6 s
} 1 \. i9 w$ p9 y( I7 z
# T2 J  C, X9 ~
</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-18 19:27 , Processed in 0.426886 second(s), 57 queries .

回顶部