- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]9 \4 }7 h! A3 f' s9 @
8 N: s( r# v% ~
2 [4 d5 `+ G: _2 Y! U6 l
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: , q; R! x2 n! ? u k
BLOB字段的读取:
# n, U J; }9 y9 |. A TBlobSTream* TemplateStream;
5 n' h8 c' q2 A- ~1 b char* TempPlatePtr;
2 A7 n' ^6 k$ l
3 a, x. ] l9 F! H$ Z% x ^ TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
$ b8 r; \1 O0 x6 `/ G% n! p9 w( A ("SearchTem"),bmReadWrite); ) O" S1 A( I0 p
TemplatePtr= new char[TemplateStream->Size];
% h/ G H- I7 q5 s3 c0 Y: V TemplateStream->Read(TemplatePtr, TemplateStream->Size); 3 K& t3 d- s$ u
- Y" ]% X) e- o) c m
BLOB字段的写入: 2 `1 c5 @3 N0 w1 D- a; @
TBlobSTream* TemplateStream;
8 p8 d w: G7 w ]/ w char* TempPlatePtr;
+ M/ o4 M# f: L/ G: A3 k! m+ {
4 Y. J# O/ v$ k$ Q' {, ^7 M TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
! C$ A1 K0 N: w4 R2 K& [ ("SearchTem"),bmReadWrite); ) M0 Y: S$ r6 S( o- O/ a
TemplatePtr= new char[TemplateStream->Size];
% a# w2 r; n3 p' j% q! Q) K TemplateStream->Write(TemplatePtr, TemplateStream->Size); # o) K0 I+ L2 V4 {: ]- a
* f r" @ m' ~0 `0 A5 _' h1 ~________________________________________________________________
0 y# n, d8 [3 v- |. j3 t, A3 l补充:
9 h* U) \2 m9 ?获得字段的大小用函数datalength ; O2 {) k/ m3 ~( Y& p- ^
- V7 ^; m! A. G) k6 G) y
SQL Server端要作一点设置: 0 F8 c8 N# {) R8 U* U
By default, WRITETEXT is a nonlogged operation. This means that
; `$ ]3 B# V) i1 \text or image data is not logged when it is written into the database. # n4 B5 T/ F1 t3 S7 W
To use WRITETEXT in its default, nonlogged state, + Q2 J0 `0 e) K: E b
//注意!! # P: S1 Y/ H! o& q2 n! ?6 V' \! E
the system administrator must use the sp_dboption system stored 0 G& {& v; `8 }* ~/ r
procedure to set select into/bulkcopy, 2 e9 N7 Q& ?; e& O3 y+ U" q
// ( k1 J; c6 g- y
which allows nonlogged data to be inserted. ' m9 Y0 \8 u' n: e& r
; v: p9 G& R: @$ ?
做了试验,直接写SQL语句好象不行. * g% `* r& @% d7 Y
____________________________________________________________________
+ Y8 {: C( m) ~' _1 q3 @ 一些注意事项和一个例子
. ?; Q1 J9 t7 w4 S0 O/ c) F在写入时: ! B1 o0 f/ U3 u+ \( e9 H2 g
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
6 Z0 W7 i" M4 B. q(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; : u+ b4 s6 s% A0 G, ?& J* G
使得TTable(TQuery)是可写的.
: O' j" I1 i" Q0 M- O4 t
; D. d6 r/ [& F, g% \3 ^0 ~: ?下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 4 F" o a" v4 p0 c! P M
script为一个BLOB字段:
; o6 Y# }$ u2 E& a TBlobStream *pScriptStream; . |$ R& Q2 e2 q" D. j ]4 `9 T; d" I! Y9 `
//插入一条记录 ) M+ S! \3 _3 f" Z
strSQL1="insert into content(file_id,script,key_image) values('"; 3 k: P, Z* z. q
strSQL1=strSQL1+m_szFileID+"',null,null)"; % i% n( h. |2 |7 _* A( Q
dmStoryEditor->qryExec->SQL->Clear(); 2 i6 j: i# u! u* Z
dmStoryEditor->qryExec->SQL->Add(strSQL1);
$ A: Z. h# C& M9 Q. F! t dmStoryEditor->qryExec->ExecSQL();
! }. T9 J: V# O" a& W- A3 z dmStoryEditor->qryExec->Close(); ) L7 X9 n* q( B4 u. U* t" Q4 \
//整理要写入的Blob数据
2 c. I1 f" J% L1 Y! ~. q LockMemories(NewsScript); 8 I: Y# [) h4 F1 v+ o
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
' e5 [* `6 H5 N- F NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
1 z" B. y# l$ g W9 y+ ]! q if(NewsScript.m_pScript!=NULL) 4 u/ ?+ ^+ X6 U
{ & H4 i6 f. i! K9 s( P+ @# G0 ^
//再将刚插入的记录读出来,使该Query与该条记录关联
, C+ A r4 N, j: F7 p# @/ C7 q4 V strSQL1="select file_id,script from content where file_id='"+
; O4 \' g1 D& f2 R4 B' ~; R9 t1 Y m_szFileID+"'";
- J2 v& ?/ a- Z: s, O //允许该Query写
" r( r! j# s G dmStoryEditor->qryExec->RequestLive=true; # \" \4 Q$ b" w- i
dmStoryEditor->qryExec->SQL->Clear();
3 |4 F$ B* I- ]- j& u% |$ }% C/ ?2 I dmStoryEditor->qryExec->SQL->Add(strSQL1);
& I2 c& L1 T8 j$ o) H0 y; B, |: ~ dmStoryEditor->qryExec->Open();
- y& q7 Q, k6 g dmStoryEditor->qryExec->First(); ( D, S, _ O4 A0 A& ?
//将该Query置为可写 6 V4 H) \ j* X- E% N
dmStoryEditor->qryExec->Edit(); 5 J( |8 E3 Q! S; |
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
B9 r# ]; b& S5 D" E* C- h- M qryExec->FieldByName("script"),bmReadWrite);
( m4 w4 x+ w3 u3 f2 T t0 B pScriptStream->Write(NewsScript.m_pScript,
& l! V6 L5 z% T3 g2 e8 x; Q( s% S NewsScript.m_lScriptRealSize);
- u' A+ V% e0 }9 r dmStoryEditor->qryExec-> ost(); 0 D5 T+ r( U7 H7 g9 o6 s
dmStoryEditor->qryExec->RequestLive=false; $ U6 n; N* T0 ?+ W3 g
delete pScriptStream; % f! }; r/ R, s4 s. P- Z1 R
}
3 J6 ^5 ]: ]8 h) c& i# J, n8 C% X GlobalUnlock(NewsScript.m_hScript); 3 r4 J# Z* X1 m: @9 H7 G
UnLockMemories(NewsScript); |
zan
|