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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]) P1 T' z0 e& b# I; }
7 `. f( J9 W# T ]
/ x2 D& Q( Z) m. X: L; j% |
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
. z- T0 P/ d; q7 j$ P4 L, n- gBLOB字段的读取:
+ y( X+ w. y" y& j+ Q$ e$ h TBlobSTream* TemplateStream;
9 n" t" t; o2 [! i char* TempPlatePtr; c# j. r7 ~* G0 k
% }3 r" B2 @3 @. l/ Y+ d" I TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 3 y1 E# x# G" @
("SearchTem"),bmReadWrite);
% [6 a9 s8 p! V z1 t" [ TemplatePtr= new char[TemplateStream->Size];
4 M+ B3 @; O! c$ t TemplateStream->Read(TemplatePtr, TemplateStream->Size);
* m6 |" d# y$ V1 r* U 6 }4 } G5 ]: x7 V- o
BLOB字段的写入: * I K7 w6 v* Q3 ]
TBlobSTream* TemplateStream; # M$ s6 Q2 n- q% N
char* TempPlatePtr; 4 h q" E/ s/ c5 ^
) f! Q3 L: v c4 @8 D/ U* B TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName # M7 B6 u* G: s+ Q) |; A
("SearchTem"),bmReadWrite); / y+ i$ l+ _# v# H+ D2 \
TemplatePtr= new char[TemplateStream->Size]; 1 b4 G" e! }7 ?9 W) N) y& z
TemplateStream->Write(TemplatePtr, TemplateStream->Size); : {5 r) v% b+ D- U! i
% a' ~) L, p+ K; H* J4 D________________________________________________________________ ( P& \' w- [4 l# U# G; P; @2 N
补充:
# U! M$ |1 x& f2 h获得字段的大小用函数datalength
8 R7 ~# z0 T' b6 D' \: H
1 k I" r4 @' \# q! ~1 d) m+ nSQL Server端要作一点设置:
- g5 ?0 c3 a& d0 X9 [6 T0 t" t* xBy default, WRITETEXT is a nonlogged operation. This means that , o8 c% s! h% k4 w u6 }7 V8 N f
text or image data is not logged when it is written into the database.
( G, O1 |1 w% ^8 a; U. R4 PTo use WRITETEXT in its default, nonlogged state, ! I- z* y, j; Q5 \8 ~
//注意!!
2 t) Z+ w$ D7 g. o3 J) Uthe system administrator must use the sp_dboption system stored
* x2 F: |5 N# ~4 G2 zprocedure to set select into/bulkcopy,
! p( g$ Z, ], @// ! H3 N# T" n# P/ S
which allows nonlogged data to be inserted.
% D4 X* M" k* u; \
" b# G, Z' u. g4 Z) K/ x做了试验,直接写SQL语句好象不行. 0 u8 c! n. F1 m) M4 }0 Y5 G* t
____________________________________________________________________
, U6 b% q# b/ V+ y) s2 ~- v, h+ R; d 一些注意事项和一个例子 - d2 W3 E' t" N' l
在写入时:
\' T* j; e5 `3 A, o(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; + W I. y) T" w( X, e5 }& K: s
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
; Z: V* _7 ?: K* H! `" R7 G" M- ^使得TTable(TQuery)是可写的. ' n6 T& f3 S6 g% Z, [
0 @7 V; }; f, W) B3 W; m
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, ' l( x! U0 K. y; j" R; E7 f1 g+ s
script为一个BLOB字段: * L( a( V( q, J: x
TBlobStream *pScriptStream; . j0 N9 m+ m5 e. d+ z3 m
//插入一条记录 * e' h- ?- {5 R$ M3 j
strSQL1="insert into content(file_id,script,key_image) values('"; , z, i7 g, b5 a5 x4 j" }7 w2 T
strSQL1=strSQL1+m_szFileID+"',null,null)";
* e5 f: S& \% }- {/ _6 u" _7 r dmStoryEditor->qryExec->SQL->Clear();
9 m! D8 p& d1 i' Y( k% o+ ? dmStoryEditor->qryExec->SQL->Add(strSQL1);
; _+ p4 @# h" L& N. {5 k dmStoryEditor->qryExec->ExecSQL();
7 Y7 t% b# Y8 h9 A& I) [ dmStoryEditor->qryExec->Close(); % ]' p% ?+ {' l1 z+ o
//整理要写入的Blob数据
. P5 r6 }& j- v8 ~% V; O9 Q LockMemories(NewsScript);
* R' y* a% D1 |9 b% ~% Z NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
6 M9 t/ r! Z5 {; F9 @ ~ NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); ' \- N7 b3 m1 U( {
if(NewsScript.m_pScript!=NULL) " u/ y, n0 c1 z* D6 ~
{
G \# o, T: A //再将刚插入的记录读出来,使该Query与该条记录关联
F: R$ K$ _ m strSQL1="select file_id,script from content where file_id='"+ # M$ Z; I" I% K" g6 z, R' U0 g
m_szFileID+"'"; " o N( ^6 @% p3 \
//允许该Query写 + ]( `$ [ k' ?5 q1 S
dmStoryEditor->qryExec->RequestLive=true; 2 w$ h ?; @8 ~2 _
dmStoryEditor->qryExec->SQL->Clear(); & G( |, ~, N9 N2 ^9 L
dmStoryEditor->qryExec->SQL->Add(strSQL1); - K& P" V! }* V1 P; o6 `/ q9 }
dmStoryEditor->qryExec->Open(); $ o4 Y1 a) X: M5 ^4 Q
dmStoryEditor->qryExec->First(); - d$ t E( t/ X: Q& z5 @( _4 V
//将该Query置为可写 ( F+ Q' B( Z1 Y
dmStoryEditor->qryExec->Edit();
5 M+ ?0 r) P: q A% A( Y pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
) [4 i& `. z% Z qryExec->FieldByName("script"),bmReadWrite); 2 @# N' b% n# Q) E# p
pScriptStream->Write(NewsScript.m_pScript, 2 e* d3 W% w; f& J3 K1 U
NewsScript.m_lScriptRealSize);
: g* R+ l/ a/ A* @1 V8 K dmStoryEditor->qryExec-> ost(); / a/ P9 C9 V# _# z- Z
dmStoryEditor->qryExec->RequestLive=false;
+ ]$ X7 t ]# U, r& Z- Q @) m+ d delete pScriptStream; ; s/ O- \& G" Y6 {7 z
}
2 C9 P, F2 y0 P' y/ V8 V GlobalUnlock(NewsScript.m_hScript); / v. @) P$ o- C" L1 r2 U& Z
UnLockMemories(NewsScript); |
zan
|