QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3672|回复: 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%">8 o  K+ ^! s0 Q; P# a/ y% S
% r7 v% V0 x3 ?% [/ q; z- h& s
<TR>
$ v$ k+ z* J2 }) u+ M' L. L<TD vAlign=top width=32></TD>
0 `, G/ O% j* b. ?9 v<TD  vAlign=top>5. 记录集的遍历、更新
( R7 m3 E7 D9 r9 \  e
, A. {3 `0 `  @& T, I     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday1 J- J% L5 f/ T2 [" a6 _/ s
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,6 B6 j9 v. @* v6 ~
更改其年龄,保存到数据库。
/ q, S6 ~& ^: z7 Z_variant_t vUsername,vBirthday,vID,vOld;
& _8 T9 F+ J2 ], M1 d_RecordsetPtr m_pRecordset;
5 v6 u. g, P$ c' |$ `& Am_pRecordset.CreateInstance("ADODB.Recordset");
$ q7 u0 @! t, z% h* K6 J( hm_pRecordset-&gt;Open("SELECT * FROM users",
' w% y, G' ^  n  \ _variant_t((IDispatch*)m_pConnection,true),
& V0 J* B& y' X adOpenStatic,) c, `7 S9 e; O& J* ?7 y
adLockOptimistic,: `, {) _3 [& K& n0 a4 X& m% {
adCmdText);3 {" C8 v* o6 g: E% e, R2 n
while(!m_pRecordset-&gt;adoEOF)
: P% h5 M3 ~/ B" G4 p( j7 F{
  K( y+ w1 r+ W5 m% y, x   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
  }, w; l: f7 Y1 R( |! I   ///你也可以直接给出列的名称,如下一行
9 L3 a+ H! U8 u3 q   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值) W: M# W/ T$ {7 K7 w2 s
   vOld = m_pRecordset-&gt;GetCollect("old");% S2 y, e$ s  ^- Q+ D0 Y3 p
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
. U+ ~4 Y5 b) o5 x* S  I" Y. Z  z1 ~+ v   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录3 f3 A) |$ L7 G3 C; c2 ]( t4 x2 d
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
4 ]3 K9 x( c1 h3 ~/ t       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",
* d+ f8 F: S) r5 G/ C5 G* l vID.lVal,/ v5 e# E- z! l
(LPCTSTR)(_bstr_t)vUsername,
0 a( c2 n3 w* O( P vOld.lVal,- B: o2 }% Z  ^
(LPCTSTR)(_bstr_t)vBirthday);
: R( z$ S+ |. A3 l   m_pRecordset-&gt;MoveNext();///移到下一条记录
; z" E+ Q- e8 J+ V; ^}
- `2 H% p1 n- Q. p4 {6 Y' W/ Em_pRecordset-&gt;MoveFirst();///移到首条记录3 c4 `) f# ]. S" {& N# a7 c7 z( {
m_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录) k4 I. y* S3 e* N! P
///添加三条新记录并赋值  ?7 ^$ a9 m2 q2 P' X9 U- _8 N9 \
for(int i=0;i&lt;3;i++)
' D" J" H9 |8 |3 ^: v+ E{
1 d9 N' \: h( e& e9 T   m_pRecordset-&gt;AddNew();///添加新记录
; C6 F, i2 e/ R( I   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));: }- w$ w8 D9 x3 S- V
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));9 w  t2 F# P" C* d0 K2 B' Z
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));" S3 A: F# V- M
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));- }5 M1 Z. H: k- O, f- D
}* x: w" |- |; F1 U
m_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处) G9 o' ~: @, r% j6 K( a8 U
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
9 K- N. m9 G  ?' Dm_pRecordset-&gt;Update();///保存到库中    ; P& W3 D. g. Y  x) H
备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 ) ?( g9 ~: L& p; C) L. M5 R1 O
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql); ]7 ^. z" x8 p& H
{
' V& Y* u, k! s0 ^' ]! E) ]   //执行Select 语句
' C4 n& H/ e/ }   BSTR bstrSQL = strSql.AllocSysString();           
2 x+ [& Q3 q7 b+ \7 R    try
9 l; p" o7 I9 x7 B0 \" V1 [    {; r3 X- \  r: E
       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
: k5 p1 _8 v9 a           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
! l5 b. U- E, I8 M) K8 P7 d& e: N    }
- z- h: b8 m  q3 p1 `. X% p6 R" ~$ j    catch(_com_error error)
4 D) n0 s: e/ `2 F& z    {' v4 L" ?) Q" a5 C/ o
       CString errorMessage;
+ k+ {1 ]: E. d4 m) h+ m2 R+ b* s       errorMessage.format("%s",(LPTSTR)error.Description());
$ k# K: m; {& F       AfxMessageBox(errorMessage);& f6 S0 T' a) O+ @
    }
! S6 i8 w/ y  a9 W$ ~7 a}        1 J; _7 f5 z7 [- m8 l. D
//出错处理:; g& `; F3 r- F0 S
3127——没有找到目标表
! n* ~# \% c& }& g3092——目标表已经存在" p2 m( ^$ R' w" h  D1 Q. K; r# E
例如:+ d! {, k4 C6 A
catch(const _com_error e)
" @7 \) y4 U8 u+ l{* y0 o4 U! F9 t- N$ a4 Z- c% ]* r
    AfxMessageBox(e.Description());* i0 }( G7 z6 x/ Y5 `: J: x& A, N
    long errorCode=e.WCode();
5 }" i% Q7 W( E# a    if(3127==errorCode) AfxMessageBox("表不存在");
$ {; O8 A; C+ i* K2 i; x2 j: x8 i    if(3092==errorCode) AfxMessageBox("表已经存在");, q4 I- M* ~1 {
    return FALSE;& N, B) p; [  ]5 O. y6 i
} % z( T" V% ]; O9 u& n; l: [" ]+ g# ~

) |* w- `% z- h+ d, P% C# M" 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-9-2 09:20 , Processed in 1.450672 second(s), 58 queries .

回顶部