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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]& O7 w; w- O# L1 O# m% K9 V
2 r! s+ F! Y; J/ M9 k( d- Q: g
v- i) o: X& K) z对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
0 i6 m! E( @; Q6 F7 B m$ [BLOB字段的读取:
4 w( n4 ] Z$ _+ y8 G5 M% k& h TBlobSTream* TemplateStream; ( @+ t$ E, m! L) U! i
char* TempPlatePtr; 9 H7 R% t7 F! q7 u4 I) W4 Z' @
+ b$ s# L/ ~8 Z. d7 [
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
! \! W S! E- }4 P3 U; ` ("SearchTem"),bmReadWrite); 0 [0 ]2 D, o$ F3 z
TemplatePtr= new char[TemplateStream->Size]; ( }8 Z% P% h4 X
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
& U$ e2 D5 z! i/ z) i
, ], G/ H6 N" u& Z5 | WBLOB字段的写入: ( b! l* Y$ n5 l: ?4 ~) k
TBlobSTream* TemplateStream;
: v+ S2 n1 T1 ] char* TempPlatePtr; 3 _; E8 m& ] ?: U6 L. o5 j
% N- n$ V; W, n( Z w; f- Q TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName ! p) q6 x0 ]* n/ K8 C$ f
("SearchTem"),bmReadWrite); & `& O; t( ~$ ~
TemplatePtr= new char[TemplateStream->Size];
4 M% c8 f3 C: z! O TemplateStream->Write(TemplatePtr, TemplateStream->Size); , C/ b( y( t7 A! E9 l4 K6 K
; |$ v& O; ?$ i7 e5 D/ K- ^________________________________________________________________
. a% U5 y+ z" Z$ ~5 W补充: , o4 Y4 s: h1 M: |
获得字段的大小用函数datalength 5 N, M2 V2 D6 O' p: r
% y& U0 ~! u; g
SQL Server端要作一点设置: ; E3 P. O; f: v6 r* P% u
By default, WRITETEXT is a nonlogged operation. This means that
! z3 j; L* ]0 s1 n) l) |* r% s4 n. |text or image data is not logged when it is written into the database.
1 }. s* K+ T* U2 ^To use WRITETEXT in its default, nonlogged state,
, z; c; \! L# @& X2 L//注意!! 8 p/ C/ B' D, i9 r) m. G6 E8 x
the system administrator must use the sp_dboption system stored
+ t+ W# i% C0 ^( E5 ]7 L* ~% P4 bprocedure to set select into/bulkcopy,
( Z! m$ U9 L) c% W. M/ {// 6 E, j2 a Z# Z, C0 h! v
which allows nonlogged data to be inserted. 0 s5 o( Y& H4 Q
8 R6 m. ], [+ H7 X" j6 E
做了试验,直接写SQL语句好象不行.
4 U, d( A, k0 a [- v" c( Z____________________________________________________________________
5 }) G$ F' M2 U5 q; e0 t3 D 一些注意事项和一个例子
( I. w+ W$ Z/ H4 w在写入时: ' h/ `4 z& ?- R- o: t9 g2 }
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
0 f8 P0 D& {- o9 ?/ ?7 \' B(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
2 b- c+ `: j# i6 o使得TTable(TQuery)是可写的.
: o1 n/ a# f" y4 M7 U6 D
$ R. V) ?% g+ H下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
# q0 r2 V- z) ~% s& wscript为一个BLOB字段:
% |. |* p g1 z9 o7 b5 M. e3 n TBlobStream *pScriptStream; 5 ]& N1 Q5 s) D" u
//插入一条记录
8 Q0 W, f% J" b/ W% k strSQL1="insert into content(file_id,script,key_image) values('"; $ J6 K" G6 O5 J5 l
strSQL1=strSQL1+m_szFileID+"',null,null)";
8 [( W* t; p" E2 @1 t dmStoryEditor->qryExec->SQL->Clear();
3 C" U9 m$ ]5 n) ~0 m dmStoryEditor->qryExec->SQL->Add(strSQL1);
' h- S% Y% g5 p) @; [ dmStoryEditor->qryExec->ExecSQL();
5 S3 w7 N- i8 ?/ `- W$ { dmStoryEditor->qryExec->Close(); G6 ]6 F: J7 r4 R7 z
//整理要写入的Blob数据 . C8 k1 I! Q# t! a3 W7 z
LockMemories(NewsScript); 3 }0 r; R7 c: k8 F5 B
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
0 d' \* m+ O* n% C: |$ b NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); ! f6 G) @8 M4 Q+ p* o" I, f. Z
if(NewsScript.m_pScript!=NULL) ' {& C7 p% }2 H! }) {
{ % b7 t V; F$ p3 r `& J
//再将刚插入的记录读出来,使该Query与该条记录关联
* f% P2 [: R8 y/ f/ w strSQL1="select file_id,script from content where file_id='"+ 6 j/ t" m% B$ m
m_szFileID+"'"; ! \# c5 k, e& c' o
//允许该Query写 % l9 X5 ~+ v% M! X0 i! W
dmStoryEditor->qryExec->RequestLive=true;
7 o! j% r0 z4 J+ D dmStoryEditor->qryExec->SQL->Clear(); 8 W2 t! Q: _7 Q* S
dmStoryEditor->qryExec->SQL->Add(strSQL1); / H9 S. Q" x% q$ n
dmStoryEditor->qryExec->Open();
( H6 @* q3 o7 {0 z& s$ G ?% _7 Y( m dmStoryEditor->qryExec->First();
* f6 q; c1 `; U) B: f2 C) E //将该Query置为可写 4 p: R) g; k: K) O: C- v
dmStoryEditor->qryExec->Edit(); ' j$ U& {. D3 L! i0 m
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
# G# X1 t6 h$ [' N) d3 Y qryExec->FieldByName("script"),bmReadWrite); 6 P8 s) Y3 W" I! H, A! Q2 @! J
pScriptStream->Write(NewsScript.m_pScript,
* p- w2 [6 p5 s. \. W NewsScript.m_lScriptRealSize); % }3 m* u9 j( m! q7 Q4 \ o
dmStoryEditor->qryExec-> ost(); 9 J5 K1 s0 q. E8 Y
dmStoryEditor->qryExec->RequestLive=false; 9 O2 k) t: \: W: |- o. G' C3 J) V" r
delete pScriptStream;
% d# T- h( `5 o9 ^( A# ^: m* @. k } 6 `* |7 C* F, K/ s: N/ \& ]
GlobalUnlock(NewsScript.m_hScript);
2 S( k8 W J# W UnLockMemories(NewsScript); |
zan
|