QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3641|回复: 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%">4 e" r8 ^; t/ w2 y) s$ _
/ e* Q6 x( Q0 l9 P- H( s  w
<TR>5 h4 N+ ^+ T6 {: g5 O! f
<TD vAlign=top width=32></TD>2 w3 Y4 G, c; O5 a' Q. ?8 A
<TD  vAlign=top>5. 记录集的遍历、更新& ?' N' J- ^' r/ `, V

  Q8 Z  r7 c0 U6 n6 k     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
7 ~6 d2 j& V  h( k$ ?以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,. Q8 l* [6 A& O  q. Q. H1 x) l
更改其年龄,保存到数据库。 ) w2 s8 W" I2 J( h! t% b! L3 _
_variant_t vUsername,vBirthday,vID,vOld;
8 F# r6 A9 g# g' }1 o0 K( Y_RecordsetPtr m_pRecordset;
" T4 R, J- l7 r2 ~9 |% hm_pRecordset.CreateInstance("ADODB.Recordset");; W. g; @: x& d" M. c0 j: o
m_pRecordset-&gt;Open("SELECT * FROM users",
$ X; a& a$ O9 D. e7 x; P/ O _variant_t((IDispatch*)m_pConnection,true),( H6 M0 V+ T. N' g; A" C1 d6 [# t
adOpenStatic,) N; M! v& w8 l
adLockOptimistic,
1 q2 B; M$ i4 b/ ^2 V5 H. Y. L adCmdText);
1 H8 {3 d; Q0 r5 m3 M, u7 wwhile(!m_pRecordset-&gt;adoEOF)
, |/ o3 P& D" K2 k{
# V$ Y! j6 T. N- |: A  S( w$ J   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,# ^$ ~. K8 @% b4 W- H
   ///你也可以直接给出列的名称,如下一行' u4 x& c3 L, E% Q4 ~
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
% K( p0 X% X! q2 N   vOld = m_pRecordset-&gt;GetCollect("old");3 R5 ^3 u' C0 u3 F" f: N
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");3 i* s$ {* i& F, p/ }; s( ~' c' e5 }3 q
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
  s) z% n/ D, `2 v- k4 D   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)5 C* M* I2 c  D% H  w) F1 [
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
3 ~4 u* z! j8 H* Q" ?( p1 t, Y* b vID.lVal,; i$ ]& T& V) I- L6 I2 i7 V6 a( s
(LPCTSTR)(_bstr_t)vUsername,
1 D- h2 |9 e/ T vOld.lVal,
; F1 S1 u& d& S* d+ B9 e (LPCTSTR)(_bstr_t)vBirthday);0 o6 ]  n0 n2 N2 y
   m_pRecordset-&gt;MoveNext();///移到下一条记录
- a; N5 c$ }0 n9 e6 a( t7 q}0 X# U/ U+ n7 e2 M; M, Y  c/ E
m_pRecordset-&gt;MoveFirst();///移到首条记录6 J5 S+ ]( _' n
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
" U# H: e/ B6 H! n; G1 b5 N, ]9 z2 E; k///添加三条新记录并赋值: B. G5 `- C4 q, O" `
for(int i=0;i&lt;3;i++)
) I# F7 A' k6 E9 C$ R( ~# j. k+ v{: E) O- p  T7 @6 M& n0 e6 @
   m_pRecordset-&gt;AddNew();///添加新记录/ q# K; F/ _" c# i( I- O% J3 L
   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));' |2 ?! r+ Q8 N. N3 s
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));$ i, y2 U, `$ Z, K2 q$ w
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));
$ c" _' ~% O0 L% c   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));5 b9 W2 R1 h# K7 F" K3 e
}
+ Z5 e! k0 \% ?. U& F* f( \7 gm_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处5 y9 q! v$ `" O9 M; G
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄2 `& }0 w+ n4 G1 y4 d3 ~
m_pRecordset-&gt;Update();///保存到库中   
: Z* o0 {; {6 i$ z) Q( f# s& i8 I- f备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 3 v; y6 K5 h  G. u
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
  A) N6 w* d- l+ ]6 A7 S{2 ~0 Q: C+ a9 F# ~
   //执行Select 语句  `% w$ N( s# c
   BSTR bstrSQL = strSql.AllocSysString();           
( a! ?3 G, @: v* ]) r- t5 P- n    try0 t+ x1 q1 y" Q4 U
    {
: U# C! n' V" ?5 ~       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); ) v; G3 M3 r; D) R
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句5 ?' C. B5 d- o" c% D4 A8 M
    }
3 s% v+ d+ u2 a' Z6 f4 M    catch(_com_error error)( c$ x5 B+ v4 E" b3 r
    {
( _4 U2 ~. ^( Y* s+ m# i8 [       CString errorMessage;- k8 J) N0 O1 V; Q$ x8 R
       errorMessage.format("%s",(LPTSTR)error.Description());
5 a( w2 f% u! t( I       AfxMessageBox(errorMessage);4 m7 Z, _% f  Z! M# N% h
    }
! `* N: g9 S+ P; q6 }- h  t7 U}        
+ W9 M8 \* X- L+ A( z: ^( M//出错处理:
/ l* T( O- A! ~3127——没有找到目标表: a0 Y, F0 ]6 g2 w5 g7 I
3092——目标表已经存在9 {* D& W. X4 d2 L2 b' P
例如:
! p8 ?! K" D2 a. y: q! u! ecatch(const _com_error e)! ?( ?2 R% f# C
{2 ?1 @5 h- W. f/ p4 X6 g/ L
    AfxMessageBox(e.Description());
" W, z& V5 C6 q( x    long errorCode=e.WCode();
$ g# C2 g! L4 B, D( I3 U# s8 z    if(3127==errorCode) AfxMessageBox("表不存在");
- {+ {* U  U7 Z% p9 [    if(3092==errorCode) AfxMessageBox("表已经存在");
6 m8 n: c, U- L8 }4 s- R    return FALSE;
) P7 O+ h1 d! a: X( b4 j+ m}   q2 N5 j* n8 G% l2 v+ K6 b

& @2 l3 L; R3 ~. C0 g9 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, 2026-7-19 15:36 , Processed in 0.593844 second(s), 58 queries .

回顶部