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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]+ @7 h' p8 s i
! D/ V! n( T( W7 I2 t: h% ]$ c C
. w7 a1 q" Y# c7 ?+ C6 I
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: ) i! B T0 \: k+ m% P& k+ R6 z
BLOB字段的读取: * y6 I. y/ B! C
TBlobSTream* TemplateStream;
2 f2 `9 e( S A$ y z- v% H/ M$ n& Y char* TempPlatePtr;
' e5 H0 d! ]3 [0 y& M( Y7 _
$ B: T4 I7 Q8 p7 B' L TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
3 R3 q! N2 w4 E g) j6 | ("SearchTem"),bmReadWrite); 2 l* L, K; s: w; C9 g) t" q
TemplatePtr= new char[TemplateStream->Size];
9 V) o+ q8 y2 { x5 _9 K TemplateStream->Read(TemplatePtr, TemplateStream->Size); * L4 a/ X: f$ C
( Q" V: D4 R% s* s+ d/ F, W! ~
BLOB字段的写入: 8 H* x! \0 T6 z, S) S0 M
TBlobSTream* TemplateStream;
9 A- t1 b7 n3 Q' o4 x char* TempPlatePtr;
" k- l+ \+ w ]( S
" P5 {5 w! q. u+ }! A: I9 j" ]) K TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 9 j7 F( v2 N* @. b* [9 ~
("SearchTem"),bmReadWrite);
$ g" e" z, y& M+ U& @& \4 D TemplatePtr= new char[TemplateStream->Size];
) J1 H# G% O+ p. M5 L TemplateStream->Write(TemplatePtr, TemplateStream->Size);
; [& }: d0 @, c& G- u# }
% _! {$ b; @ N% ^1 }6 A2 J________________________________________________________________
2 A' u4 w. @8 E7 A3 l4 R补充: ( N" f* g5 D3 k' L9 l6 o
获得字段的大小用函数datalength + \4 d# b$ m @& e8 P
" W3 k1 p5 g9 `& A4 p: e$ h! t8 rSQL Server端要作一点设置:
$ H6 c" f$ ~7 c# r7 K1 s$ T" h3 UBy default, WRITETEXT is a nonlogged operation. This means that
! @) v, G/ ~1 jtext or image data is not logged when it is written into the database.
) A# h% F9 n7 eTo use WRITETEXT in its default, nonlogged state,
: r) I, @1 t ?, J//注意!!
" T$ l4 ]- j- O5 E Uthe system administrator must use the sp_dboption system stored + O, l. M4 o( s3 ^
procedure to set select into/bulkcopy, 4 w$ Y8 Q* B D- D
// % D0 o: i7 W2 P: o" E
which allows nonlogged data to be inserted. ' \: a. k4 x: n$ q) o8 K1 q
( `/ D: O, j _1 K) s: {: e
做了试验,直接写SQL语句好象不行. * b" m' l& c b& `& h" q
____________________________________________________________________ ' X4 ?- U! a" j* w h1 D. Y7 R
一些注意事项和一个例子
& w9 w* `) S S8 h4 J9 m1 H: g( Q1 G在写入时:
" `/ ?) @( o0 I4 H/ l' T(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
: L) c$ M, z* s; E% f: p: Y$ a$ S(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
5 i" b+ k- m. f使得TTable(TQuery)是可写的.
: g3 b$ E1 H: |. g p$ L
2 \$ \$ n# |( s5 D5 g下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
- g [' ]7 \ `& t$ Mscript为一个BLOB字段: * E9 x% a& G0 N" w( D, N/ I1 d
TBlobStream *pScriptStream; 1 g: O* j- l# e; J
//插入一条记录
$ ]8 e: [" w8 q6 X+ L strSQL1="insert into content(file_id,script,key_image) values('";
5 i1 ]6 @: ]) ^: r7 ], G strSQL1=strSQL1+m_szFileID+"',null,null)";
& w8 \. K/ l4 ?- J6 j" v9 y dmStoryEditor->qryExec->SQL->Clear();
$ ~- Z9 q+ C7 T- s( }! t* ^ dmStoryEditor->qryExec->SQL->Add(strSQL1); ) h- S( t0 [( c; Y6 e
dmStoryEditor->qryExec->ExecSQL(); ) `" \. \+ y. c% h E9 B& E/ u. d
dmStoryEditor->qryExec->Close();
) y/ i: P- x' i //整理要写入的Blob数据 7 ], l" L- |/ g" s
LockMemories(NewsScript); , @/ R1 }* W8 G1 O/ ^
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
( }- c% n# T! o3 B; u NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
4 k1 G) a* x8 |& d if(NewsScript.m_pScript!=NULL) ) b1 ?, N! e1 I/ E b: P8 {# o
{
& t( Y5 v A0 w0 \ //再将刚插入的记录读出来,使该Query与该条记录关联 / h) D1 k2 H& h; J' \. a
strSQL1="select file_id,script from content where file_id='"+ : K! c) ?" |* {5 Y6 \) |+ k
m_szFileID+"'"; |! R7 ^5 J' A+ m* E) @: j
//允许该Query写
. R7 H$ U. n2 t9 R m* ] dmStoryEditor->qryExec->RequestLive=true;
4 x) w9 Z4 i/ z& e. a) N9 \8 C dmStoryEditor->qryExec->SQL->Clear(); + E& D' H5 T( s1 d5 R
dmStoryEditor->qryExec->SQL->Add(strSQL1);
; ^" R2 d$ r/ _) e dmStoryEditor->qryExec->Open(); / N8 j: z5 [, @# M! y& b
dmStoryEditor->qryExec->First();
6 l' s3 q7 h. q2 k9 A //将该Query置为可写 ' Z) \$ _: |" N6 G
dmStoryEditor->qryExec->Edit();
3 Y$ v1 f, X* I9 W0 V pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> a8 }1 S u7 h% @2 K" H
qryExec->FieldByName("script"),bmReadWrite); + p1 X% P4 }( p
pScriptStream->Write(NewsScript.m_pScript,
) R$ q2 U( r4 e9 Z, p. z7 U" h% @/ Z' E NewsScript.m_lScriptRealSize);
9 h4 Q- K/ R+ x8 @3 g dmStoryEditor->qryExec-> ost(); 0 @& N* ]" ?/ ~) B
dmStoryEditor->qryExec->RequestLive=false;
8 D$ W; C; |: U+ p7 A delete pScriptStream; . N% n/ T0 G6 r! m% K2 v
}
# I6 D# k C8 ?1 Q7 B. L GlobalUnlock(NewsScript.m_hScript);
1 R. Y4 Y2 k* r3 { ?& t UnLockMemories(NewsScript); |
zan
|