QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3376|回复: 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%">3 i" j: c: M3 [3 n: J% u6 c

2 P. A0 E2 H) q9 j5 e  b( X<TR>, I" y) k/ u( e8 L5 `. A
<TD vAlign=top width=32></TD>
! {* G/ w+ W0 J' r* G( L<TD  vAlign=top>5. 记录集的遍历、更新) N" _' O7 p. L# ?

$ k. d6 z) i# ~% O  ^9 R: p) Q. e8 m     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
" M" k  Y7 a9 Q' s5 p" w以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
/ J7 p5 v2 g: f+ v6 P8 @! ^更改其年龄,保存到数据库。
- A; H1 m! `0 k5 R2 @- T+ D_variant_t vUsername,vBirthday,vID,vOld;
% k1 T/ K1 k$ u_RecordsetPtr m_pRecordset;9 s3 _6 K+ d' W/ X: W
m_pRecordset.CreateInstance("ADODB.Recordset");
% d9 z, A+ J2 K! ^7 mm_pRecordset-&gt;Open("SELECT * FROM users",2 K3 m: ?1 h- {2 o( n- c
_variant_t((IDispatch*)m_pConnection,true),7 B, ?) W  X! H) b& Q) S, C& u% o
adOpenStatic,
, S9 O* l( q) _8 k6 J8 h, s, d* m adLockOptimistic,
0 a5 S) K/ Y( m adCmdText);
  S; J) H6 T) e: G0 Uwhile(!m_pRecordset-&gt;adoEOF)
3 X& y  V- ]! e( k0 M6 y{
7 U2 J* [% P  Z/ b! Q/ l; U   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
1 R; x. O4 T3 |$ @9 M: W9 E" z   ///你也可以直接给出列的名称,如下一行
1 k/ U. s  r2 x- B   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值7 F  c/ v% E+ z; @2 Z
   vOld = m_pRecordset-&gt;GetCollect("old");& c! R4 e$ P0 k% v
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");& Q0 K, x5 }: M: Y! Q
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录6 k' w# b7 A5 `" c6 N4 |
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL). V9 \, r4 V6 L+ s
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",% ]- ~" f! ]% ~
vID.lVal,
; j! |+ K5 O5 I2 U4 M! J: m$ x; u (LPCTSTR)(_bstr_t)vUsername,4 C4 o+ ~( }: f2 F4 g6 z# T$ X& J+ b) b
vOld.lVal,% h5 K$ N% Q& u! u2 _
(LPCTSTR)(_bstr_t)vBirthday);
: \; V7 ]4 _- @- e: V4 C   m_pRecordset-&gt;MoveNext();///移到下一条记录7 @( s/ s! d. T% Z9 k5 t# W
}& r! I! a( }# |! R; u& K* z, H/ t
m_pRecordset-&gt;MoveFirst();///移到首条记录
8 e6 x+ u- h) S; ?( S! Vm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
0 S) \# O8 s; Y( l///添加三条新记录并赋值
, n' Q1 H" O# A" A9 h- ~$ J( ]for(int i=0;i&lt;3;i++)2 Z7 R& e( b. M. [: s: F0 v; @" w: L* H+ o
{9 R( h, c1 C+ @+ e! H' @$ i2 j5 {
   m_pRecordset-&gt;AddNew();///添加新记录7 J; v) ]" B: ^- C+ d# {
   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
5 N, N! I1 s( X- i2 v: @   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
( Q1 k0 |% Y7 p   m_pRecordset-&gtutCollect("old",_variant_t((long)71));$ c/ {. L$ C) f: q2 E7 d4 e  N
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
& T7 C1 I: i4 e}
; G. ]4 G0 H$ K2 Xm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处- H% C4 v1 z; ]3 H  ~3 p
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
/ i* T4 ^2 q" x3 L/ Y1 B/ u2 Om_pRecordset-&gt;Update();///保存到库中   
% V5 I& R$ A. b8 d备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 6 S1 \' w* @' M3 I% Y; A2 m* ~
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
3 X) d, [$ c9 j6 |! G/ Q, y{
, _$ y4 Z/ z/ |- v- F   //执行Select 语句* B; t9 R: a3 Y* x; z! R' b
   BSTR bstrSQL = strSql.AllocSysString();           
& w- n* u+ w$ @& S8 _, {    try; j2 g/ X4 a/ z7 Z
    {. n( z" Y$ K3 r. U! @# O8 ?
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); % O5 j4 a7 V: n6 U, S
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
- k1 L6 |7 a& P0 m. |- U    }( ~! o" O4 b. h3 W0 v/ K0 W) ^; `- n, n+ S
    catch(_com_error error)
# k0 d, f0 w/ |1 D4 n    {; k7 c4 W, s/ ~/ c& h7 _
       CString errorMessage;* ^" ~# F, k2 |" l% b
       errorMessage.format("%s",(LPTSTR)error.Description());
% c7 X* `6 y. O       AfxMessageBox(errorMessage);
/ V1 _- ]- }1 a- d! t% `    }
3 W. D7 {/ g' `6 t}        
7 R9 G; {0 F& @' F! c6 ?$ p//出错处理:! g, c- q) Y; g
3127——没有找到目标表
4 [1 z0 v. N+ F- u) o3092——目标表已经存在+ X( H# L! J' `: `1 K, {0 \- C
例如:4 F! R5 u; Q8 ~4 j: R
catch(const _com_error e)
+ F# u% D& C$ I4 `  k{
! B, g" D8 e- F    AfxMessageBox(e.Description());
! r" d" x( [) @8 z- v- F. ~# j    long errorCode=e.WCode();
# M5 ~  y& ]" H& h, t- E% d: `. n    if(3127==errorCode) AfxMessageBox("表不存在");
/ S9 w: ]! S' ?* D) k    if(3092==errorCode) AfxMessageBox("表已经存在");: H# O1 m1 v' H* N  |; a( _0 {' c
    return FALSE;3 p1 i# P! c& G/ F
}
8 e$ t! }. p) A* I- F
6 _/ _1 l" x4 G</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-8-1 05:01 , Processed in 0.431658 second(s), 58 queries .

回顶部