QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3673|回复: 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%">5 A$ X2 G# i2 k# U; ?3 L
" V; u8 @8 T, y
<TR>% X9 R! D; M7 U. R& s  o# k
<TD vAlign=top width=32></TD>4 @+ W: @& x7 C# z# S$ b( x
<TD  vAlign=top>5. 记录集的遍历、更新
, ]5 M6 ]+ A  Q0 r# f4 Q$ H7 U
     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday3 r% s2 v) m/ a- @! N# K
以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,4 O9 W  p/ h# z
更改其年龄,保存到数据库。 5 c, `8 g, y9 I; h/ O, Q
_variant_t vUsername,vBirthday,vID,vOld;$ \; n0 [  N6 |/ h3 ~9 p4 e( }" r
_RecordsetPtr m_pRecordset;
/ u6 ^) w3 S! a; \9 a2 |m_pRecordset.CreateInstance("ADODB.Recordset");
/ {( j, k" H4 b( p9 P( H4 n0 Dm_pRecordset-&gt;Open("SELECT * FROM users",
6 [! C( [, T% `$ O, o8 ]4 z) n% D% k6 k _variant_t((IDispatch*)m_pConnection,true),8 T8 ~8 r7 ?! y
adOpenStatic,
9 h$ N$ j+ @9 X) O0 o adLockOptimistic,* z$ R- ~( R3 e0 e; v! J# T6 q# ~1 Z
adCmdText);
" C) g' T+ U) ]6 B' Hwhile(!m_pRecordset-&gt;adoEOF)$ R" X; P  _7 b, d, {
{
0 X) N. q- Q) r$ @* K4 E/ j! D5 @   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,  t0 G- A8 [9 H6 {& R* \& g  X
   ///你也可以直接给出列的名称,如下一行
/ t* @+ Z0 E7 `* [9 h1 ~' P7 m$ g   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值; |" h8 E* z: L3 o3 [" p0 _
   vOld = m_pRecordset-&gt;GetCollect("old");
' N( Z; ?* J  `' Z   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
0 v# }  |& U! k2 }+ N& ^" A! Z   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录/ D4 B9 l6 S1 I, v" O  Y6 |1 g9 H
   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)& k* F1 o4 a" w3 A* m" @- }
       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",% ?- P) z2 }4 ^' l6 `
vID.lVal,
, p$ I9 V, p. t- Z (LPCTSTR)(_bstr_t)vUsername,
  A3 Y, d9 ]2 p( q% ^7 c% j! L, G vOld.lVal,- V# ~% W; W% f. ]
(LPCTSTR)(_bstr_t)vBirthday);
! u1 ~. o4 z4 K3 F   m_pRecordset-&gt;MoveNext();///移到下一条记录$ B( N- g6 Q$ U5 c
}
7 D/ w. [! v" {" Y% Gm_pRecordset-&gt;MoveFirst();///移到首条记录
/ u$ x1 Q* _3 bm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录
  |" l7 W) h  }5 o3 G; l) x///添加三条新记录并赋值4 W  z: H+ L- |+ f
for(int i=0;i&lt;3;i++)
: l; j& K2 L+ l' i4 F{) d* V* {) d4 f" J
   m_pRecordset-&gt;AddNew();///添加新记录
. _, E( b) e, i2 V  u* D# c   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));
( ]9 Q1 B$ I4 B$ z5 V* M   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));9 {5 L9 ?/ ?0 {6 M
   m_pRecordset-&gtutCollect("old",_variant_t((long)71));
1 `3 L3 |9 Q# b8 s/ n& q/ [   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
& Z  t" ]; ^2 |8 ]5 |; |9 w}
, X- d0 @+ i! c5 Z2 \1 Am_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处# W3 Y, R4 {& I8 }7 J
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄# M2 A$ y( f7 v
m_pRecordset-&gt;Update();///保存到库中   
# C8 x5 U/ [: V" e' }/ F备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果 ) t3 f  q8 V0 O; u
void ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)
2 ?* W  Y, ], `! T3 Y0 {/ K{0 I7 h  m/ R* Q/ }0 o- h
   //执行Select 语句1 }' U4 E: r, p: i- C; ^+ g, @
   BSTR bstrSQL = strSql.AllocSysString();           
" c4 V6 _  S, g4 V! p    try) y; h0 X* w9 _* `! t& A* _
    {
4 \1 T& A8 J. `: p. P       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
/ F% e0 Q) {, K" ~           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句" M$ i) I! w' H6 x/ l/ _) |2 z& B
    }
0 r& ~; f0 p/ l) \    catch(_com_error error)2 p$ m1 J% _2 f  j6 N4 h, [) m
    {
" x5 {" W# l6 R% _5 ]       CString errorMessage;$ W5 O, b2 z0 k  o" L+ C0 R
       errorMessage.format("%s",(LPTSTR)error.Description());
. T' B+ O+ s) O) m1 o0 C& T& q       AfxMessageBox(errorMessage);
1 B9 J% ?* a2 `7 o7 f2 v- p    }
% f- F7 B3 F$ ^  ?4 D}        
- T  Q" Z7 [, ?. `' Y# d, G" m, n//出错处理:& t  S% V: `& H9 Y; g# ?& j/ V# `+ K
3127——没有找到目标表4 ~( G) \9 Z6 F2 u7 s5 U' V+ O
3092——目标表已经存在- G% ?+ @3 R+ u: w
例如:
0 a) U) I+ h, v0 g5 s: g$ |: d( {" \catch(const _com_error e). d" q9 t& p. V  B/ p9 C9 _& x
{
4 |; `5 [" z" }    AfxMessageBox(e.Description());% h0 x5 n! `0 C
    long errorCode=e.WCode();' v; Z0 i7 J! t: `/ S2 e0 y# u
    if(3127==errorCode) AfxMessageBox("表不存在");
/ ?; S3 }& ~6 Y% ^! C9 a    if(3092==errorCode) AfxMessageBox("表已经存在");
. Y0 S4 \; h% d! x/ ?, h    return FALSE;
& m& T( c5 ^8 y& P% K9 E3 o  F6 q}
$ W3 x9 a! A# N0 n: i
$ a5 g: N! J: B# {</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 11:05 , Processed in 0.377334 second(s), 58 queries .

回顶部