QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3571|回复: 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%">
/ W! y( }5 H7 a/ Y$ H7 c
9 J9 |; [& t( K" b6 i<TR>' N* a4 X+ E) J% k* P. k
<TD vAlign=top width=32></TD>8 m( a, k% p3 e' M. v) [  ^, M, V) X' \
<TD  vAlign=top>5. 记录集的遍历、更新0 J% v0 Z# Z# c0 f- p; _  ]

7 W6 l% h  t, `9 s     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
# V1 n+ S9 ^; ]0 f3 M$ P9 p; `以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
1 T% R" k! k" U8 V1 H, ?更改其年龄,保存到数据库。 ; S+ E6 ?( l+ h# X
_variant_t vUsername,vBirthday,vID,vOld;0 `* X! U, `) R; ?3 L" Q8 w
_RecordsetPtr m_pRecordset;/ {/ F( u4 n! y. m) Y& t; v4 H. Z
m_pRecordset.CreateInstance("ADODB.Recordset");
, J1 P. ~9 S' g/ M! Wm_pRecordset-&gt;Open("SELECT * FROM users",2 i  ~. D4 X& e# P9 j- d
_variant_t((IDispatch*)m_pConnection,true),' z% r8 Y6 e, D, v* S; Y
adOpenStatic,
1 ]6 n& H* C4 [( M adLockOptimistic,
& ?/ I; N) C: g1 @" }) z6 j; { adCmdText);; _$ S9 ]0 [0 a$ c' V
while(!m_pRecordset-&gt;adoEOF)
6 l& u, M* L. ?7 a& J1 v+ u* }{
: q7 y' R  v& u. U/ _# W# h) q& K   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,- l5 v: D4 |  n) q) ~+ U" p
   ///你也可以直接给出列的名称,如下一行
9 p8 ?3 r& G9 N) W! ~( s! X. H0 Z   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值$ [& p7 |, G! W/ i& I& y' o" @
   vOld = m_pRecordset-&gt;GetCollect("old");
1 t: u* K+ Y5 k2 z   vBirthday = m_pRecordset-&gt;GetCollect("birthday");; I* B( H! G. {, A
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
3 M  n9 Z3 q' |: z: g( x# z   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)& K4 H, e# k) M
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",1 K( g* O: [  |# ^: F
vID.lVal,
7 |6 X0 v2 }, w. j/ I (LPCTSTR)(_bstr_t)vUsername,
+ c# f7 ?5 X) W5 F- o' N vOld.lVal,
. f" f, h0 R; _. q/ C (LPCTSTR)(_bstr_t)vBirthday);0 k0 I  ]5 L+ b
   m_pRecordset-&gt;MoveNext();///移到下一条记录6 p: d) i1 g. B1 e9 e6 @; y& @
}9 f  U$ J" j4 \
m_pRecordset-&gt;MoveFirst();///移到首条记录
/ h7 u% ], ~, K! ]; L6 ~3 l: Pm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录9 R, m  a8 ^7 p
///添加三条新记录并赋值
( f4 j  [9 k* m$ Rfor(int i=0;i&lt;3;i++)
- Q1 z6 Y- R" U0 W) Q{
% ~: M- T$ ]- h1 K   m_pRecordset-&gt;AddNew();///添加新记录
5 g! p+ {. O0 X) \   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
2 |  X5 }0 q! L7 r2 g0 w( j   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));4 D# u/ K* U3 S
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));/ x% P, {4 v0 H' O% c" f8 H4 s7 W
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
& s( t& E0 g) G8 S+ S}( k/ Y1 @+ v8 G' k, O- N4 j" t
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处8 @6 `3 X, ^  M/ U+ e6 m
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄" M3 M; M4 j! S/ T
m_pRecordset-&gt;Update();///保存到库中    ! S, t( C, ?* @2 J" d
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
9 W6 W+ D/ Z8 V- s5 O9 pvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
( A4 L- d' A& C% J+ ~{' |$ M( X2 O# `8 `  h/ A" m
   //执行Select 语句) r* i# N: Q6 O. K: x7 ]' `
   BSTR bstrSQL = strSql.AllocSysString();           
* V6 Q8 l( _' j3 J0 c* k    try
  b. j$ w: [0 [% k$ G    {6 c$ G  @$ d( y2 W- Y+ P0 x
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
/ S) S" F7 {7 j: i           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
) j& h/ E' R  \; A* X' w) ]2 I    }
* s( y: `; L6 o# m/ Z    catch(_com_error error)& o& v2 W# K, g7 l) U! F
    {5 Y9 y2 n' H1 k+ Y' ?
       CString errorMessage;% o2 d" p3 q/ M* V4 k
       errorMessage.format("%s",(LPTSTR)error.Description());
& {  }! @( g3 f) n/ q% j$ M# \       AfxMessageBox(errorMessage);* l' `. m8 W) z7 b8 {: j3 V+ S
    }
# E; H$ {3 l" }" _' }}        
5 {! W& U3 m( e# j0 S* }7 a//出错处理:$ n* a7 G. N; d
3127——没有找到目标表! k9 R% O. H* J6 @
3092——目标表已经存在
# e0 e: u6 {5 {& Q& Y& D* `. p/ D例如:
2 ?% d# J5 m0 C8 h; Ncatch(const _com_error e)* e7 ~, Y. \% F) }& r5 {  I9 K) C
{) Q+ `1 ]2 G: h' a
    AfxMessageBox(e.Description());7 {# N, X6 t/ o5 |4 ~
    long errorCode=e.WCode();
& [7 f" e( E5 S# _    if(3127==errorCode) AfxMessageBox("表不存在");; F8 L8 J1 |% v- L: \- c( ]
    if(3092==errorCode) AfxMessageBox("表已经存在");0 j' j1 }4 o8 {2 Q/ D4 n
    return FALSE;
- `* D+ X8 v( \9 I# h. j}
! ?% Y0 Z. c; x" W' e0 F
+ p( V1 B8 U7 S1 B8 A! F</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-4-17 07:17 , Processed in 0.526803 second(s), 57 queries .

回顶部