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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]
6 }' m% u; C5 g0 j+ L
7 o! d i4 k$ m$ F
* P+ i9 w* g: m' i/ p. L' _7 a1 a对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: / S/ X6 |. O" V. Y
BLOB字段的读取:
5 m& l# e# T/ {9 F1 S# k TBlobSTream* TemplateStream; % Z) x4 V$ ~- l' w2 ], I0 E
char* TempPlatePtr;
9 s7 r+ {6 S9 M* v$ V
V) v4 [1 `; i' B TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName C0 [; F3 B' e! a. ]
("SearchTem"),bmReadWrite); . W! A e( B$ J6 ?
TemplatePtr= new char[TemplateStream->Size]; 6 I! K0 i* x% C# v% O$ ^. ?5 H
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
4 a" f$ N8 C5 B' r. B* ?) k p
) M. e) Y' y$ z! N6 i7 h- M7 w* MBLOB字段的写入: - z9 i' A+ L5 x8 m
TBlobSTream* TemplateStream; - w' g8 ^! L5 d# o6 Q: ?6 _
char* TempPlatePtr; U/ L& U; d2 N* ]" a y
# D2 F6 |- L. N6 f1 V9 x4 s0 C# o TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName - @5 L+ [- ~$ n! ^) M* h
("SearchTem"),bmReadWrite);
5 C' l- `7 Q9 D! N% v5 A8 d TemplatePtr= new char[TemplateStream->Size];
- X" I2 Z5 I! T. s TemplateStream->Write(TemplatePtr, TemplateStream->Size);
* t" m5 p% B2 v; W6 b
' |9 g0 c+ E: o# M+ n9 p9 K# e8 x________________________________________________________________
- J7 t' G4 y$ L5 |补充:
0 l+ o' b( v* R! x2 ~. {4 Y/ B* K& h% a+ I获得字段的大小用函数datalength 7 N3 D+ Q# F7 E H) h/ {6 D5 ]
6 j8 t' A) y: `% K6 MSQL Server端要作一点设置: , [1 g" e* j) t/ ]/ X/ h
By default, WRITETEXT is a nonlogged operation. This means that
/ l( B/ W. n; h4 e, o. S8 h: Gtext or image data is not logged when it is written into the database. 5 `( ^0 }1 p% q) R
To use WRITETEXT in its default, nonlogged state,
% R e8 _+ o, }1 B. x//注意!! ; \2 z* y8 A( e$ [. w. p& `
the system administrator must use the sp_dboption system stored / \/ L' W, J. _
procedure to set select into/bulkcopy, ; Z; V" \% P/ Q* Z2 a' X
//
; t1 p- b! T* b% Qwhich allows nonlogged data to be inserted.
& S2 U9 G# U+ o5 y, ]( D2 ^
% }' `7 {# r2 B+ _9 F做了试验,直接写SQL语句好象不行. 0 P1 v7 p5 O$ o" o* K& `
____________________________________________________________________ 3 \0 y3 q" E) Y5 _4 h/ a. X
一些注意事项和一个例子 1 \" w @1 a1 j* F
在写入时:
$ X/ p6 P. k! {, s9 r5 @3 J( O9 K(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; - s. R& B4 w2 j' T# z
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; + D7 F- g7 G) E* a
使得TTable(TQuery)是可写的.
4 J6 j6 y& d' |
0 J4 c6 k8 z" S) A下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
4 d+ E( ^7 H* Cscript为一个BLOB字段: $ I: r2 E: R1 n+ u
TBlobStream *pScriptStream; 8 N* X/ Q4 p' w3 R7 v" I
//插入一条记录
* l/ q/ [+ Y' |- ?' g8 u4 e. r strSQL1="insert into content(file_id,script,key_image) values('";
5 ?, ?% e/ S5 K6 a" R: d) ~ strSQL1=strSQL1+m_szFileID+"',null,null)"; - F1 z# U! |, y q1 Q7 w
dmStoryEditor->qryExec->SQL->Clear(); " H/ Z) t( p& X! q4 n
dmStoryEditor->qryExec->SQL->Add(strSQL1);
" i, l8 G0 `8 z, [- y H dmStoryEditor->qryExec->ExecSQL();
p! @* j8 T/ f/ O5 v& e; n dmStoryEditor->qryExec->Close(); + l& W7 j3 f; t5 |- `
//整理要写入的Blob数据 $ |. t; `9 @ T+ A4 c" b# I0 D
LockMemories(NewsScript); & U f @! V- q. p- G' s$ T+ a
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
/ d. c' g$ |% L: J NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); 8 R1 q( J, g, ?( [' q
if(NewsScript.m_pScript!=NULL)
' W- S+ i# ]3 G4 _' }' ^ { 9 O) ^! `' K2 m7 [3 u1 L
//再将刚插入的记录读出来,使该Query与该条记录关联
6 Z5 r% F# u! \- Q6 X; b- s/ [ strSQL1="select file_id,script from content where file_id='"+
# ~" @# `* K- o7 ^ m_szFileID+"'"; 6 K' @2 [1 n: N( J: w
//允许该Query写 6 K! f) }, c$ v! ]8 V! R, H. k
dmStoryEditor->qryExec->RequestLive=true;
4 I. C8 D# e" ?) Y dmStoryEditor->qryExec->SQL->Clear(); / H+ ]2 l; k b8 P7 _. m
dmStoryEditor->qryExec->SQL->Add(strSQL1); 5 W8 ]6 t* D1 o" N- Q1 I& t4 j
dmStoryEditor->qryExec->Open(); $ |& Q5 ]* \! T T& k/ K: ~! x
dmStoryEditor->qryExec->First();
* J: Z) B( i; Z) A //将该Query置为可写 2 {4 y- C! o4 @) ?; T" G
dmStoryEditor->qryExec->Edit();
9 n! q8 m U9 ?8 D pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> & c& s. G& Q$ u6 H/ A. G& C
qryExec->FieldByName("script"),bmReadWrite);
4 U& a6 ^% m% N+ a2 P B6 a pScriptStream->Write(NewsScript.m_pScript, / s3 j% k7 |5 L
NewsScript.m_lScriptRealSize); 3 X/ A7 J+ r! K3 ~! T
dmStoryEditor->qryExec-> ost(); 1 z4 @; V% ]3 S/ N4 R
dmStoryEditor->qryExec->RequestLive=false;
, X2 R+ \+ M4 P' f6 C1 | delete pScriptStream; / l `9 o) J- R2 Q7 [
}
- i2 [+ M, ~3 Q! e" I5 D GlobalUnlock(NewsScript.m_hScript); , @# |8 L6 [" Y
UnLockMemories(NewsScript); |
zan
|