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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]
0 ^8 o4 d/ K; T. G
4 c% ^/ d% ]( M& F# d1 P
5 P+ d$ k: c$ t! ?6 U/ f6 q. o对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: ( G' z% ~# ?- i0 k9 [! M; U% M: i; m
BLOB字段的读取:
$ A; q$ j1 E. m; ` TBlobSTream* TemplateStream;
6 `) M$ S2 e4 u5 o6 J q char* TempPlatePtr;
% e3 P' [) i @, Q. ]8 \
% G+ N: ^, J, H- I( Z) W TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
; K& o. d/ E8 f/ U- u& {6 }2 E ("SearchTem"),bmReadWrite);
; o5 P! x3 [. c' m. @2 U8 N TemplatePtr= new char[TemplateStream->Size];
3 _/ ?* Q) I; f" |) r( n' d TemplateStream->Read(TemplatePtr, TemplateStream->Size);
2 O3 w- ^' L( d4 \9 [2 L6 E0 S " @ N z0 [, F; z( @" c" r7 W
BLOB字段的写入:
; y7 C, |4 B# u6 }: G; n6 Q( S0 z1 N- g TBlobSTream* TemplateStream; & q! W9 f( g! i) j) Z
char* TempPlatePtr; + p: o) g6 {+ Z4 x# E5 T
5 H2 l# y+ E% Q: x3 M
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
' E: t+ C' T3 s" U0 S& Q0 h2 T2 y ("SearchTem"),bmReadWrite); 4 f" o2 x, _5 E- \* M1 l
TemplatePtr= new char[TemplateStream->Size];
! ^$ Q9 D1 E1 ^ TemplateStream->Write(TemplatePtr, TemplateStream->Size); 9 U$ F8 S2 D) Z# j* ~. Q# e
. d/ I4 S7 A: h9 d________________________________________________________________ + }, l6 A7 T8 P2 b9 I }' d
补充:
: z$ a& A5 b. m" Y8 ^获得字段的大小用函数datalength 6 d% W+ w; a0 x
3 z p# {$ w6 [. z6 t1 iSQL Server端要作一点设置:
' Q9 |! j) ]' s; Q2 VBy default, WRITETEXT is a nonlogged operation. This means that
y% S% ~/ u8 w+ w5 f" ytext or image data is not logged when it is written into the database. ' z( f! G5 C3 M9 l. J; f
To use WRITETEXT in its default, nonlogged state, 3 l- g% W- W/ s4 `1 ^& k
//注意!! 7 ? d& y2 ^, ?. k2 D
the system administrator must use the sp_dboption system stored 0 n p8 }# F) O4 _3 G3 U* K
procedure to set select into/bulkcopy,
5 ^4 T% y9 p9 Q- v% u( J//
' q% ~( c( l) y$ P; U- Owhich allows nonlogged data to be inserted.
. p( i0 j) \. M# E _
9 J7 R4 n- Y1 C8 w/ ]8 Y8 n% x& K做了试验,直接写SQL语句好象不行. ' E- H9 b; Q- q9 |: w
____________________________________________________________________
# R, t% F* T& Q1 t" l/ K 一些注意事项和一个例子 9 i# Q0 [" O; N: }6 f2 K' r
在写入时:
) X! O. X( R) w(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
- L9 y% t8 y( l/ v- r+ \! _9 Q(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; _, t& a! B) |
使得TTable(TQuery)是可写的. 8 `* c' m. _* Z
3 W6 T8 D! p8 {# `) _. l1 N# R
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, + ~+ e+ R; M% z
script为一个BLOB字段:
8 Q9 s5 ?+ f5 g* S4 u" i0 f TBlobStream *pScriptStream; 3 F4 n1 q7 \* ~' ?" _: D6 v6 ]% y
//插入一条记录 2 D3 t0 b% D/ O" g/ f
strSQL1="insert into content(file_id,script,key_image) values('"; & y1 J/ c' j0 V9 @6 Y
strSQL1=strSQL1+m_szFileID+"',null,null)";
7 _: V5 \ j- A9 d& a/ d/ K dmStoryEditor->qryExec->SQL->Clear();
k+ a9 T' g' Z! i dmStoryEditor->qryExec->SQL->Add(strSQL1); q+ S G/ I k
dmStoryEditor->qryExec->ExecSQL();
/ Q+ E. D0 n) I& L dmStoryEditor->qryExec->Close(); 3 j0 |4 M( @. |* W" r
//整理要写入的Blob数据 : D3 I1 j/ G% ?8 t% b% X
LockMemories(NewsScript);
# l: K9 ]7 o0 [ NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
6 r! ^7 Z7 L- f4 K NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
% s! u: g+ t7 q7 X9 w+ w o3 `, T if(NewsScript.m_pScript!=NULL) 9 J( I! F3 y+ }6 c8 ]
{
/ @" l* P; ~3 F# Q1 l9 N* I //再将刚插入的记录读出来,使该Query与该条记录关联
0 g- u. Q! n: q1 m" \1 s, N- u$ o2 l4 N strSQL1="select file_id,script from content where file_id='"+
1 s1 H; m- g7 @* c; }: W5 A m_szFileID+"'";
' G, }* A# u# Z- B& w5 F" `9 T //允许该Query写 0 X9 H, C' |3 a$ L, ~
dmStoryEditor->qryExec->RequestLive=true;
& C; `# f3 q7 \6 w$ T- o dmStoryEditor->qryExec->SQL->Clear(); 6 Z3 n/ ~* g9 }3 M- C( O# |7 S
dmStoryEditor->qryExec->SQL->Add(strSQL1); % w. u3 B% I' L O
dmStoryEditor->qryExec->Open();
5 z5 ~9 _; S* A9 e# T% M* _ dmStoryEditor->qryExec->First();
1 _) e% ~; k( d# t //将该Query置为可写 ) [0 C. x/ z+ k5 ~, p9 ?0 w! [! z
dmStoryEditor->qryExec->Edit();
" D l$ c6 r2 m1 Z3 g! h7 D- p pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
& _# `/ K6 g2 E qryExec->FieldByName("script"),bmReadWrite); ; b( H6 |- x7 V
pScriptStream->Write(NewsScript.m_pScript, & }+ Y( H) b6 n5 S& y( a
NewsScript.m_lScriptRealSize); 5 l" v2 {* w6 |$ l8 a2 u" x
dmStoryEditor->qryExec-> ost(); 1 n, Q3 s c- m& H, u! O7 Z! d
dmStoryEditor->qryExec->RequestLive=false; / x" a5 E: q) N( w
delete pScriptStream;
9 H! ^( t. T) m) p) m }
# ~8 A- W5 G7 Q0 Z, |1 z: d GlobalUnlock(NewsScript.m_hScript); * ?& F( c) n0 \9 k6 D7 p
UnLockMemories(NewsScript); |
zan
|