QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3677|回复: 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%">  \$ ^( Z3 _! v1 o( o
3 l0 R6 E7 G7 ], T/ d
<TR>
8 F2 [2 ?& L" G6 L1 l, s<TD vAlign=top width=32></TD>$ ]) O7 f8 E3 m+ X: \# k+ w6 A
<TD  vAlign=top>5. 记录集的遍历、更新
% ^1 x: ^' d0 o# L2 f4 J4 ^
3 @9 m6 H$ t3 L6 o% Q3 c% V9 D7 q     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
) J' x7 g! H8 p: [" T% S- F0 X! |0 ?. m以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,
* }; B- F7 X! c" i8 W' s0 |更改其年龄,保存到数据库。
. p# j" w" C( U5 k4 n2 ]0 A_variant_t vUsername,vBirthday,vID,vOld;
7 T6 b$ Z+ f( x, h8 n9 V! E4 x! u$ C_RecordsetPtr m_pRecordset;6 q$ o0 `/ G$ `0 s+ T
m_pRecordset.CreateInstance("ADODB.Recordset");
) y# E, d1 J1 \; W4 _; ?! `( q; ~m_pRecordset-&gt;Open("SELECT * FROM users",
3 y, y8 e" b2 i9 j! b- h( w9 O7 Z _variant_t((IDispatch*)m_pConnection,true),) V+ t$ N2 p! n5 }0 b! k6 C
adOpenStatic,
8 B: p# w/ e3 ^$ x$ s1 m adLockOptimistic,
9 M  D- Q! D5 P4 R- P adCmdText);2 h. n9 y6 R. q- M
while(!m_pRecordset-&gt;adoEOF)
4 ?: E6 x1 f6 \6 `{: o1 i7 W# n* e0 c& ]
   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,- k: Q7 ^6 T# J$ U, J6 V& c
   ///你也可以直接给出列的名称,如下一行
! Z# k. o! S3 ]$ P   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
9 W* q/ }  g, @6 W   vOld = m_pRecordset-&gt;GetCollect("old");7 L3 t6 C5 p% V4 E# l9 }. I! F
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");# C9 o. n, M2 z& o( I2 P" T! N
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录2 |) g& {9 r3 @
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
0 M- _5 N* z3 s5 w! J       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
, _, y6 n, W+ } vID.lVal,
( H1 i, V5 Y# Y1 c& Z9 K( m+ U (LPCTSTR)(_bstr_t)vUsername,
& N: i5 T( J5 Y) W vOld.lVal,  I9 {% D" j2 n* S2 r& ?  ^
(LPCTSTR)(_bstr_t)vBirthday);
3 O2 p* \1 s5 p/ N! q7 a( n   m_pRecordset-&gt;MoveNext();///移到下一条记录' B1 _9 i& d0 ~6 H5 }
}( w9 j2 t/ i8 i+ [$ C" N
m_pRecordset-&gt;MoveFirst();///移到首条记录
4 B9 J8 R7 w# D7 u* f" Wm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录7 U9 N1 P6 V# _  O% y4 F
///添加三条新记录并赋值- A/ t& X' w7 u2 K( L: s
for(int i=0;i&lt;3;i++)
* c+ H) e; \, Y6 r( o- c{
: D2 j& n, B; }9 `$ Y   m_pRecordset-&gt;AddNew();///添加新记录5 g1 w3 x  G5 |  u% ?
   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
7 v0 X2 N- n6 H+ g+ r/ P2 U   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
; }/ _2 b! U* a  N9 q& w2 @   m_pRecordset-&gtutCollect("old",_variant_t((long)71));
6 I5 i, Z6 k! {+ T/ m% H   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));% a6 K- y- Z/ ]! h) S9 l' K& ]% P
}) N1 W! e% Z; q9 j  G1 a
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
; u5 [9 C4 a  gm_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄8 A! J) E3 u- V$ c! |: n
m_pRecordset-&gt;Update();///保存到库中    & }2 D8 e$ X) N
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 6 R3 o( Y9 a: O5 t% N
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
4 f# W; B  n* R+ v4 P! t3 @{
. `: Q" J. t" e) Y( B1 d  r   //执行Select 语句
% x& H9 U7 S* H- d+ R   BSTR bstrSQL = strSql.AllocSysString();           
* g3 J$ c& B( [, @7 Z9 z    try# k# Y. }; y0 p! N# N
    {
" O$ W  D+ k0 N6 B5 s1 a       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
! R1 c: }& Q. |, }           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
8 d( J1 {; @' ?    }
; b: J4 j6 ]8 D( ]2 M) ^9 J. r    catch(_com_error error)( g: [$ o4 Q+ ]+ f6 D: m
    {
3 ?% m2 N  ~8 v  L/ O       CString errorMessage;
% a9 m* O, t6 ~1 X       errorMessage.format("%s",(LPTSTR)error.Description());
& \# U1 Q" x2 f0 @7 b2 J       AfxMessageBox(errorMessage);
" X: |' r! |' t( y" y9 D    }
' X* z, U/ \0 ~# c3 f+ S}        
; a7 _5 t4 {( @//出错处理:
+ Y4 m- n/ `5 d8 b" t3127——没有找到目标表; R1 Q7 f% F& ]0 Z: R
3092——目标表已经存在; x) B' J; w: X  {' i1 C2 \
例如:
: d5 U3 i" U: G. s8 Hcatch(const _com_error e)0 g' n7 f$ t' ^/ U) L) ]
{
# W; i+ b2 K- \+ U; D+ c    AfxMessageBox(e.Description());" p$ Y! U$ @; u7 }9 C8 d/ z
    long errorCode=e.WCode();
: Z/ c) E# [( z/ K2 y; t0 f    if(3127==errorCode) AfxMessageBox("表不存在");
5 A$ M6 x: X3 F. D/ u4 W+ S2 V    if(3092==errorCode) AfxMessageBox("表已经存在");3 g4 u1 d: z: w8 W; k1 [( X1 R. Z
    return FALSE;
! @' n( l+ R! A1 K. J" m. U}
* m+ ?! S* \3 q' t: ^% y6 x) ^, ]+ n
5 x8 Y7 S, ?& o$ j</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 13:58 , Processed in 0.406059 second(s), 58 queries .

回顶部