QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3676|回复: 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%">1 W$ B2 r2 V9 ~. \2 i3 N

: P# ?; E8 G( Z1 ^8 `/ G; @8 G4 K1 T<TR>
! r4 B- A: ?4 |6 {* _8 t0 O<TD vAlign=top width=32></TD>
) }: q" A: N9 _8 J8 N6 U% {6 L( P<TD  vAlign=top>5. 记录集的遍历、更新
1 i, K  [" k/ ?8 f' C: O/ G) O/ A6 H( G9 |( S9 v
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday( P9 Z+ }" S+ l7 P& ^8 U' J3 z
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,% T- ~* n4 [2 i
更改其年龄,保存到数据库。 0 @" @  R# H* l# E8 [* U
_variant_t vUsername,vBirthday,vID,vOld;% E6 s$ n- l3 b
_RecordsetPtr m_pRecordset;! \$ ]/ N: X0 E$ T9 N
m_pRecordset.CreateInstance("ADODB.Recordset");6 P3 c' L2 g2 z, j; N- f' z  I
m_pRecordset-&gt;Open("SELECT * FROM users",
- ^: O/ J6 H7 A( R3 U3 u$ J" P' D _variant_t((IDispatch*)m_pConnection,true)," @# l: d; E; d4 p0 ?# |1 F
adOpenStatic,
  h# i5 p# C6 ~6 [$ B3 a adLockOptimistic,
& v  X3 ^8 h. n  e adCmdText);
6 F2 b8 h- V  g# e1 j0 Fwhile(!m_pRecordset-&gt;adoEOF)0 e9 n  u8 F8 I7 R9 i
{
0 ?& r4 i* u$ _# n* E+ V( s( e) F/ q   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
* |6 Y/ o( D0 a7 `0 j3 Q! R   ///你也可以直接给出列的名称,如下一行
4 z- Y0 G- ~5 Z2 M   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值
, i# Q, t1 H4 n/ w5 O( r   vOld = m_pRecordset-&gt;GetCollect("old");' S+ R* F( q/ O( B1 d
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
: h! p1 X/ }4 t# [   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录" e5 b% N- w0 i
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)( r/ z; U/ f0 r) R, A" |
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",! U1 s; R5 s- _# ?% o$ R& b
vID.lVal,4 F8 R/ F* M9 K( E
(LPCTSTR)(_bstr_t)vUsername,/ H7 E3 c3 G/ Q* p
vOld.lVal,3 W& E( m5 Z) N/ E6 b- j4 F( A
(LPCTSTR)(_bstr_t)vBirthday);- p! C/ K6 F& T& D7 V# I
   m_pRecordset-&gt;MoveNext();///移到下一条记录
3 q& [% o2 @( ]2 U$ o}
: d1 R$ G. N8 J+ Tm_pRecordset-&gt;MoveFirst();///移到首条记录+ w) P. R/ K) x
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录$ E6 }& a, w  Q0 ?* R+ B8 e
///添加三条新记录并赋值8 r4 \" @3 S6 _8 H
for(int i=0;i&lt;3;i++)7 E5 @- [* r5 X4 P# |
{3 l4 [* L( ]6 K# S9 @7 k& E
   m_pRecordset-&gt;AddNew();///添加新记录
- N8 Y1 a: U- ?  Y   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));9 o5 L6 w7 N0 G5 N) ~6 X6 r% i- b0 p
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));" j$ e  M3 R- b% }* z4 f
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));1 ?7 f: N& K" f) ]& R/ f% u
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
3 W/ E+ J# w' V$ {) F}
0 }% _9 I. r1 y# {7 K- Im_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
" W. F" k( h, n' fm_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄* z. n- w7 S* i: o* H
m_pRecordset-&gt;Update();///保存到库中    3 t3 P' P1 q$ Y4 c3 A! _3 o6 r
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
0 V7 v! o, w: n# Z/ d4 q; jvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)4 |1 t, B$ O- K# i# F1 j, \. o/ \
{% R9 x, {- b& @8 l4 d
   //执行Select 语句. ]0 i9 @1 j! w8 E5 o( |
   BSTR bstrSQL = strSql.AllocSysString();           ! A! r* B, l  {! L7 U! Q; n& M% Y
    try
7 p. B4 `( @3 Q! A6 b- x0 F2 U    {
2 v( O$ G4 |3 a: Q       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); & G  \! B( E+ i- I6 |) K4 `
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句" Z2 D7 x/ h  m3 M$ P
    }' a# q! q8 h" b/ m
    catch(_com_error error)
1 a' X* }8 e3 I% }1 t    {5 ^5 _/ f/ D7 m6 ~! p! a
       CString errorMessage;# V: |2 a4 q' ~# _  n
       errorMessage.format("%s",(LPTSTR)error.Description());
. Y' L, {- C( a5 f       AfxMessageBox(errorMessage);* ^0 Q8 f- X/ J2 W4 S* U3 o
    }
: c5 l" `/ M* P6 t}        % K4 @" }$ {( z2 m4 x' h
//出错处理:
" R' B: A' A) J' x3127——没有找到目标表
' c% B  F2 k" x4 b7 D3092——目标表已经存在5 E! S+ l0 d4 E: i- D% v  K) x0 v
例如:; d4 N/ j# Z6 ^; I4 e
catch(const _com_error e)- ?6 G! j- h% j* }. v
{
/ O* O7 N. _0 @# d5 W  g    AfxMessageBox(e.Description());5 g, z6 }# ?! X7 F' p, B0 i: o
    long errorCode=e.WCode();
" {4 m! V5 s) L" Z4 B    if(3127==errorCode) AfxMessageBox("表不存在");
: u/ E7 k" W! c    if(3092==errorCode) AfxMessageBox("表已经存在");
  s- I5 H+ c1 P% G- u2 [+ l$ k    return FALSE;6 `' E; q* j4 H5 l
}
3 a6 {5 S4 t' H5 L7 n$ T6 L5 `/ p0 B& y5 x0 R$ k
</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 10:50 , Processed in 0.323602 second(s), 57 queries .

回顶部