QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3678|回复: 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%">: V# W/ X! Q5 g

2 {/ D1 X; S: D# A9 ~5 X+ g, ^$ r6 f; u<TR>
- p: a' c+ O% P& m# F6 p9 y<TD vAlign=top width=32></TD>2 H0 @. d1 x& M  i( H' L" ~" T; B
<TD  vAlign=top>5. 记录集的遍历、更新0 X0 {, }8 Q$ ^# p

# U. i4 d# L, `3 P     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
' v0 T, S0 ?0 ]7 _以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
- t/ y$ U( h* S3 D; s! \, b更改其年龄,保存到数据库。
% U" z' e, {/ Q/ a_variant_t vUsername,vBirthday,vID,vOld;
6 h: b7 _) Y8 b_RecordsetPtr m_pRecordset;
4 I: D) _4 ]0 Am_pRecordset.CreateInstance("ADODB.Recordset");
1 y. e% _' r) i7 f- ]' c( a) ?. Cm_pRecordset-&gt;Open("SELECT * FROM users",
6 k( C- H- z, \0 j0 L( p5 V _variant_t((IDispatch*)m_pConnection,true),
+ k# t, c) g) C) V6 {! F8 ^9 w adOpenStatic,
6 B3 o+ N# U6 m  ?) o  L8 N adLockOptimistic,
" I) s) \3 t# z  F$ v" C, ]! \ adCmdText);7 f, D* ~9 |! u3 Y! o( ~0 S9 ?, ?
while(!m_pRecordset-&gt;adoEOF)
1 s8 p5 k5 X9 b1 B* L{
5 W8 m  a  U; @3 C* F2 R   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,# R5 B4 \0 `& T. o" e; I
   ///你也可以直接给出列的名称,如下一行
5 a, S& K2 Z( c   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值* Q8 _' v0 H: o4 O
   vOld = m_pRecordset-&gt;GetCollect("old");0 h! O: l4 _# \' y+ w
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
/ N- n' A5 c$ Z   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
7 t" Y( V2 ]3 f- X" c   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)  J) J. j3 O! u. X% M/ }
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",4 I3 G8 Z2 o! s& R$ n
vID.lVal,, ?" I+ ~; Y/ s  }; r+ ^& z
(LPCTSTR)(_bstr_t)vUsername,1 r( _* _8 C: S* w6 U5 N0 i
vOld.lVal,
! Q1 g& t4 t1 y) l; D (LPCTSTR)(_bstr_t)vBirthday);
: |5 D) r  k0 A. y8 Q$ |, _   m_pRecordset-&gt;MoveNext();///移到下一条记录2 Y8 S* h" c* P/ l; _
}! ~6 o6 P1 @4 g  ?; k* W
m_pRecordset-&gt;MoveFirst();///移到首条记录+ h7 J; b. _6 s4 I* C( Z, N
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
: V: ^9 E) S9 Y5 n4 Y* f% r# a///添加三条新记录并赋值1 r! }+ I) k- S4 z! a; a+ h
for(int i=0;i&lt;3;i++)
; b0 _6 H: }4 d$ v! \0 ]* \{0 {! M8 A2 D# d
   m_pRecordset-&gt;AddNew();///添加新记录1 O$ w0 l% D. k0 }2 v! d% a
   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
" R* Q" }  |  o: H   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));' I+ `1 \4 o# ~5 @
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));
' n, z; m6 {( |& U   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
( U3 h4 J# |9 e9 ~9 `}
7 ~2 O9 E7 K4 y, P/ Zm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处; a- v$ r) h6 c! S" o# W( f
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄* A; i5 r; |: t0 `3 `
m_pRecordset-&gt;Update();///保存到库中   
; Q/ f! r2 w( z备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
. |6 t% V3 J* Tvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)" R3 V6 Y, N7 s' \
{
; @$ u9 @7 d! \; I6 J1 K/ O  j: ]2 u% n   //执行Select 语句
( F9 l& v: o8 i* e% T7 w1 p: o+ t   BSTR bstrSQL = strSql.AllocSysString();           
0 p4 P$ B1 y3 I; T    try* ?; g. i, L2 w4 I
    {
) L0 {) P6 N2 {( _       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
% O0 i1 D, F( P( f# y           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句- O2 K7 j: W$ K# e- V
    }
! W$ Z* T# Q- U# p6 K  ?1 z2 i4 G) w    catch(_com_error error)7 `9 T. ]8 a# f5 Y( ~: J; H
    {
" B$ P: K* ?4 Y- T; `& a# A       CString errorMessage;0 j6 U8 s* q1 H
       errorMessage.format("%s",(LPTSTR)error.Description());9 @% s  c8 C  ?5 t6 T: E
       AfxMessageBox(errorMessage);
: \# D2 C$ e3 F    }, \& `7 `% ~7 q+ c7 Q" U. }" ?
}        6 s- [" ^% d: E! K
//出错处理:. w0 R' j" L: B4 K# _0 z
3127——没有找到目标表9 t( L2 ~) H, Q0 h
3092——目标表已经存在
! i, Y2 ^! G3 G/ K例如:9 x2 a2 i' S8 Y& ^' O- _6 ]
catch(const _com_error e)
4 i8 y( ^5 N% O" @2 N3 `: f{2 h0 K3 n" R" _8 H- J8 f" N2 x
    AfxMessageBox(e.Description());
' S# i: \, B* l6 h+ s( |    long errorCode=e.WCode();
* n0 n! K& }' i+ Z0 d& g    if(3127==errorCode) AfxMessageBox("表不存在");! S! W) T8 _! ]; d  ^9 G( `% e
    if(3092==errorCode) AfxMessageBox("表已经存在");$ `/ A2 M/ [& o6 a
    return FALSE;" [9 h5 j; Z$ S* E) [0 Z/ |
} ( f) s% \# q7 t9 S9 R6 a

! g) s9 Y$ U* b  O' ]</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-9-3 14:36 , Processed in 0.427199 second(s), 58 queries .

回顶部