QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3614|回复: 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 j* w* J9 m: x
7 A2 @9 G* U3 w- w7 [6 r- D
<TR>- Z& l% \% E) q& f- p" V+ i
<TD vAlign=top width=32></TD>
. t6 r- r5 I, Y$ T/ G* P# C# k<TD  vAlign=top>5. 记录集的遍历、更新% _5 V& v7 _2 z) @$ u( t4 I& C: Z

! G( M+ e. ~6 ]2 i6 ^. R& `     根据我们刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday
7 B9 A) l* X9 j3 \5 ]6 ?6 a以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,9 L: t! Z5 e6 ~! Z8 W8 @$ Q1 B
更改其年龄,保存到数据库。
0 ?5 }5 U& S$ L" j1 U4 z% c, g2 B1 r2 w_variant_t vUsername,vBirthday,vID,vOld;$ e+ T. b5 V- D& U
_RecordsetPtr m_pRecordset;1 i+ s! p- o+ Y' P' q' ^
m_pRecordset.CreateInstance("ADODB.Recordset");
* E, h- i, m; g) Km_pRecordset-&gt;Open("SELECT * FROM users",
5 v% X. B8 K2 P( ^: X  N _variant_t((IDispatch*)m_pConnection,true),, {4 c9 r' z8 p9 _7 [8 z' d4 p! J
adOpenStatic,4 r9 I' ~9 g8 n% _. A( K0 A
adLockOptimistic,
# d2 D$ D' J, t; O! a4 @5 C/ Y adCmdText);) N& L# i5 q% A! y2 G1 C
while(!m_pRecordset-&gt;adoEOF)
3 C$ ^8 S) ]$ j# {7 G% i, l: p+ ]{
$ V! o: a' g7 d. L* ]% ?) ^2 Y   vID = m_pRecordset-&gt;GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数," k* q% N6 E' _. f' o, c
   ///你也可以直接给出列的名称,如下一行; r$ c1 z1 d6 w, E
   vUsername = m_pRecordset-&gt;GetCollect("username");///取得username字段的值, D5 u8 @: R8 E0 h! S3 m
   vOld = m_pRecordset-&gt;GetCollect("old");( p! j* l) I, j. Z% R% L; c# S
   vBirthday = m_pRecordset-&gt;GetCollect("birthday");
( J5 T0 D& z" o$ t4 {   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
& G, U- w3 l! w. N3 Y$ \" U   if(vID.vt != VT_NULL &amp;&amp; vUsername.vt != VT_NULL &amp;&amp; vOld.vt != VT_NULL &amp;&amp; vBirthday.vt != VT_NULL)
- V$ l1 d9 L% Y; Y; S       TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",2 Q! {& ^) S0 _' B& v( q( @* j  M
vID.lVal,, Q  R% Z! y6 f- n
(LPCTSTR)(_bstr_t)vUsername,/ \6 T% W* }" o" [4 q0 {
vOld.lVal,
% ], k6 I3 a7 h, S. c (LPCTSTR)(_bstr_t)vBirthday);
1 ^8 `7 N5 Q6 `6 x1 i. o- l& T' s1 @2 h   m_pRecordset-&gt;MoveNext();///移到下一条记录: ^, c9 c+ Y* t0 P. h
}
4 `% r7 p2 b" [& \) k6 ?5 y2 cm_pRecordset-&gt;MoveFirst();///移到首条记录
! v# v* F! O! j' A1 G0 s, y/ zm_pRecordset-&gt;Delete(adAffectCurrent);///删除当前记录6 y9 X# g/ U4 R( f
///添加三条新记录并赋值
4 e# J  w# B2 R: S- S! I4 w/ bfor(int i=0;i&lt;3;i++), |$ O% E- c. L
{
$ @; _% `/ o$ b: `5 V   m_pRecordset-&gt;AddNew();///添加新记录
2 C" |$ l, L5 r9 s- |2 u   m_pRecordset-&gtutCollect("ID",_variant_t((long)(i+10)));) G4 |: F2 d' U
   m_pRecordset-&gtutCollect("username",_variant_t("叶利钦"));
, C1 F" e3 a5 U+ M   m_pRecordset-&gtutCollect("old",_variant_t((long)71));7 e0 v  X' a/ _5 V$ j
   m_pRecordset-&gtutCollect("birthday",_variant_t("1930-3-15"));
- L( \! J; |$ W3 e1 |7 i}
8 i7 i# g' n1 w( ^1 y3 `! }( im_pRecordset-&gt;Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处8 g6 _* Q( N8 ^: q* R
m_pRecordset-&gtutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄1 t& A- }, L8 b" B* [$ Z
m_pRecordset-&gt;Update();///保存到库中   
; @* [. T1 U% G: E% c/ ^: ?备注:多次查询可把查询过程做成一个函数ExecuteSQL让m_pRecordset获得连接指针m_pConnection查询结果
7 y7 ^( p% I# [/ M" `2 Z+ dvoid ExecuteSQL(_ConnectionPtr  m_pConnection, _RecordsetPtr  m_pRecordset,CString strSql)8 h& n# C$ z3 i7 ]# Q2 U7 K  @( J
{
- x. n7 T4 }3 F6 T5 p+ I   //执行Select 语句: K+ Y  F7 m* P
   BSTR bstrSQL = strSql.AllocSysString();           
$ n: K- ?' q, n! ]# Z, i! W    try
9 c0 T0 u, b) @% R7 {: V# z    {
8 n; O: _) x; o       m_pRecordset-&gt;Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); * L+ [' i' P9 J1 f% g
           //adOpenDynamic:动态  adLockOptimistic乐观封锁法  adCmdText:文本查询语句
0 s0 w9 s; ]- r& N! g    }: j& X: \5 E2 r! v  h+ w  ~& ~
    catch(_com_error error)8 o- J, V4 F( k! c; U
    {4 _. w, t' R' n: C! c
       CString errorMessage;
+ s( H; u" X7 C  W; L  l       errorMessage.format("%s",(LPTSTR)error.Description());8 a( L. l1 t& n; d; N; u$ @& c
       AfxMessageBox(errorMessage);: n, d; ~% b& W
    }
* g& ?- ~* x/ m# Q# {) h}        
& P: K! \7 p+ B, s3 i" f+ z//出错处理:; B4 Y( i2 p+ W% u2 l8 [
3127——没有找到目标表
; e$ n5 s3 y+ C; J9 H3092——目标表已经存在4 t, i! D  E9 Y1 {4 e8 q( B
例如:
, Z6 p# {4 U+ D+ S* B% g: z* kcatch(const _com_error e)
. H9 u1 \6 K$ i( Q! I5 u' i; n{
) }' X5 J# @; _; I  D: |9 U+ G9 o  ~    AfxMessageBox(e.Description());
( k; E* H. r' G8 W0 Y  |5 J# M, y  k    long errorCode=e.WCode();
# V7 }. ]' O& S# I3 g# j: v% K    if(3127==errorCode) AfxMessageBox("表不存在");
0 z5 L8 f* x; y& b- N4 N0 J    if(3092==errorCode) AfxMessageBox("表已经存在");
6 z* ~/ e. [) `* T" P4 F2 \8 o    return FALSE;
- u! o5 d1 r8 B2 A, q}
1 a" r' w2 ?! P7 D* W) R* c* o9 E+ 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-6-3 21:29 , Processed in 0.588154 second(s), 58 queries .

回顶部