QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3580|回复: 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%">
2 k% J' R5 O. l( a. V! S8 A! y# O  m* v# m! E3 ?
<TR>; @+ X4 a1 _6 _  @; U' C
<TD vAlign=top width=32></TD>
( i: ~& i2 W, t<TD  vAlign=top>5. 记录集的遍历、更新
, u9 R: c/ k2 o) }3 ^- c$ N0 ]$ p7 ~) E
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
5 X" }% e1 k. F. Q0 m8 ~以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,; a' ?& M8 }! u7 [1 L
更改其年龄,保存到数据库。 ( V- s9 s' A, Y, X0 T8 l9 y6 S& |
_variant_t vUsername,vBirthday,vID,vOld;
/ R$ g4 h& ^* p) U' A4 N_RecordsetPtr m_pRecordset;
; p9 A+ l' N1 _; I" @m_pRecordset.CreateInstance("ADODB.Recordset");
  z$ Z; v* A  i1 k# Jm_pRecordset-&gt;Open("SELECT * FROM users",4 t7 X6 t" y5 K  n$ \$ A
_variant_t((IDispatch*)m_pConnection,true),+ B2 T5 M0 A, _3 q
adOpenStatic,
% l. `. c4 E2 }* f  a# p# y1 Q& @ adLockOptimistic,
. c1 g2 |* o, y" y; E- G adCmdText);
4 Z( C8 W' c' b: p4 `* zwhile(!m_pRecordset-&gt;adoEOF)1 L6 N+ _, Q8 I8 G0 |
{
0 O3 ~- q3 I9 n: C: A   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,; {/ e8 `0 x1 ?
   ///你也可以直接给出列的名称,如下一行9 g5 j3 H+ ]0 f+ t8 M
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
( a+ t8 f. k, U( B3 x7 ~3 O   vOld = m_pRecordset-&gt;GetCollect("old");
  ?7 E2 Q, ^3 M+ a. B; t   vBirthday = m_pRecordset-&gt;GetCollect("birthday");' p% g! U0 m$ J: I8 {' J* z- R
   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
6 c3 _4 t& U, n2 |   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
. M! w& k6 p' p       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n"," a! L/ Q) T+ O& \7 A3 s; w3 A
vID.lVal,
( w' K1 ?3 u) U) `" g( L+ u* n (LPCTSTR)(_bstr_t)vUsername,3 m4 ^6 T7 a+ T  K
vOld.lVal,
2 t& |/ x" }/ u8 T! G (LPCTSTR)(_bstr_t)vBirthday);
+ k; I3 t( j7 ~" x; \) h0 }; f: R   m_pRecordset-&gt;MoveNext();///移到下一条记录
! w, T/ p; ?% J) V$ l}+ U: E; w( Q/ u. y% K5 M) U
m_pRecordset-&gt;MoveFirst();///移到首条记录
0 y/ \: p+ O# N* im_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
$ h; S& r5 E! @' B1 ~4 v/ p& v///添加三条新记录并赋值7 ]1 P  y1 C0 ]2 U  C# V* u
for(int i=0;i&lt;3;i++)4 ^+ Q4 q% [$ l" Y! g3 C
{3 B$ u9 u% x  C$ F% q
   m_pRecordset-&gt;AddNew();///添加新记录
7 u" o( I9 U, R1 S2 t   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
8 x6 t0 |, d$ l0 o5 f; y) S   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));" ]" e$ }5 b2 }1 M" l
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));& M% e! B  b3 F% L; c
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));4 d. v: o$ a6 _( t2 V( z
}" X, a+ c6 u8 {, M' j8 h5 w, }' P7 j
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
* s5 p2 k5 V7 ym_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄1 [5 V! v! _6 B* _. V, ^) t
m_pRecordset-&gt;Update();///保存到库中   
: ]! A4 f3 g0 R5 J. \备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 $ S4 ?7 m; a7 u8 ~' d" Y. e
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)6 {' T; U/ N4 s8 ?5 N1 I
{+ I; o2 w! k0 F8 U# z; v9 U+ J* b
   //执行Select 语句
) ?, _  k' r& D8 f/ T2 d  K   BSTR bstrSQL = strSql.AllocSysString();           
, U  G% g1 \( L. |7 C, e$ \4 }4 ^    try9 C& p+ p. H, |
    {
8 ]. z9 c' t/ R2 E       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); ; }% Z, J, r# W
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句7 d! v% d$ @: f4 \3 u' u
    }
. a9 Z# b" D. V0 ]& ?4 q: Y& ?: ^    catch(_com_error error)
) n2 ^# j6 b! x( A) E! O    {
8 h3 ]: `% L* ^( D       CString errorMessage;
. I4 V! i1 s2 W0 W       errorMessage.format("%s",(LPTSTR)error.Description());6 |* L6 ?6 B) k( n
       AfxMessageBox(errorMessage);
6 F0 J1 c: y+ o  b4 `9 j9 F    }- c, A) v7 F' C/ g! k' ?
}        
- H1 W- I' a+ |//出错处理:
( U9 {, [7 c  r3127——没有找到目标表
- x8 `4 w- ?! Y* z3092——目标表已经存在9 ^" T" M/ H8 Z5 z1 B+ I) D
例如:3 _% J9 Z) v% C! r( K
catch(const _com_error e)% q- a6 l* E6 K) o+ B
{
. w5 u* N! J! i' B0 x% z# h/ [    AfxMessageBox(e.Description());( ~+ I2 ]2 Z& X: n9 `: _
    long errorCode=e.WCode();
' x8 G& k) N2 T* }# p( t9 J    if(3127==errorCode) AfxMessageBox("表不存在");4 R, G) Y+ r" h' P6 E& y' X  C4 W. {' z
    if(3092==errorCode) AfxMessageBox("表已经存在");3 _* u9 L' G( Q* e: [3 q' Q
    return FALSE;
$ X; C6 Z* q0 z8 l7 ~$ L} 0 i5 p; j" h2 F! b3 `

  u- ~/ o: j+ r" t% M9 I6 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-4-18 03:37 , Processed in 0.383808 second(s), 58 queries .

回顶部