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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]
( {9 q c7 `" s' w: \% L6 C4 | 8 Q$ t' W x, `2 w2 ~% z
3 u( N, |3 h& Q, F
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: # b( L2 @, M" k: ?) {0 W9 u+ A% U
BLOB字段的读取: ; n# p% S' l$ k
TBlobSTream* TemplateStream;
( z9 { ?' y; _3 ? f) H- \2 I( U6 o: m8 w char* TempPlatePtr;
/ V7 d' x$ |% Y* c8 @! O
; F1 S" \% I5 W) o) o* M# p) m: m/ s TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName ' r4 ~$ t# ]0 s r F" U% \$ N
("SearchTem"),bmReadWrite);
9 x" S8 E+ N7 @. Q# I TemplatePtr= new char[TemplateStream->Size]; " X1 J/ O, @3 a1 @
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
- {# q& p) E, S; ?0 j9 R ) B/ A8 L# @; X9 J# f8 Z9 i
BLOB字段的写入:
5 d( _. J" `; V, Z1 C% k( O! ~ TBlobSTream* TemplateStream; @8 m5 f. b+ p
char* TempPlatePtr;
& W7 x% ?% V6 j/ E# ] " `, h) j7 q1 @$ u0 d
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
3 n0 s" Y* K# X- p5 e3 q6 O ("SearchTem"),bmReadWrite); , |( s: c0 ^8 ?- c
TemplatePtr= new char[TemplateStream->Size]; 6 `% @+ n* V) [, Z
TemplateStream->Write(TemplatePtr, TemplateStream->Size); 3 o0 a% f7 d! Q/ m$ U c
, _3 z6 ^+ ^' T' G
________________________________________________________________ # \6 ?, U5 ?- k
补充:
. I- W0 N% R* ^/ V* t8 i3 Z获得字段的大小用函数datalength
5 w" S+ ]# h/ {0 o8 k: q4 F1 |
# R2 p6 K: B; X. l" ESQL Server端要作一点设置:
' }; {8 t( ?9 N$ ]- pBy default, WRITETEXT is a nonlogged operation. This means that * \8 E% `9 {; f1 S; a9 h6 K
text or image data is not logged when it is written into the database.
6 X& l7 T$ e8 s' Q* X0 d. B. aTo use WRITETEXT in its default, nonlogged state,
' E* _4 l* T" c$ @! F6 Z N$ O//注意!! $ A- E/ r! S+ A' a# ]( B1 X
the system administrator must use the sp_dboption system stored + U" M, @& ?2 M2 ?$ i% C
procedure to set select into/bulkcopy,
0 G: D2 E0 l* g6 K4 M# G// 2 q+ N# q* y4 D, _; W4 Y! e7 o& U9 A
which allows nonlogged data to be inserted.
0 B! h, H9 i+ i. c: u% F3 X 9 V8 Z' I- V4 F2 g6 \& d
做了试验,直接写SQL语句好象不行.
8 E) ?( L a0 n, [7 W____________________________________________________________________ + W; N) d$ ], Q6 [
一些注意事项和一个例子
' C( ^9 h3 E& e; p2 h在写入时: 5 [- U: j" n! m. k( J8 P8 o
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
: Q+ B: q# C1 M. v(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
/ B. f0 S5 u+ F! A ]: N使得TTable(TQuery)是可写的. 1 W" _6 K4 E: v4 e: I
# a k( \8 a6 S5 H# a! s; q
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
/ ^+ n* x: W \script为一个BLOB字段:
# T! m9 e/ S0 X! i3 _ TBlobStream *pScriptStream;
3 R, c- d" R- O2 c3 u0 e0 K1 B' ? //插入一条记录
5 p0 O3 x& d2 G0 a5 S: G6 W strSQL1="insert into content(file_id,script,key_image) values('";
" O; g2 H( O% Z8 e/ | strSQL1=strSQL1+m_szFileID+"',null,null)"; 7 I$ g5 {8 M, F7 h9 o w" b
dmStoryEditor->qryExec->SQL->Clear();
6 A6 o) ^! `# K& Q* h dmStoryEditor->qryExec->SQL->Add(strSQL1);
# |% K# w9 r9 H: s P dmStoryEditor->qryExec->ExecSQL(); 8 X) @ a1 f' @+ E: ^& v/ F* T4 x
dmStoryEditor->qryExec->Close(); 1 h% ~ q7 h; U$ C1 L
//整理要写入的Blob数据
9 C9 p A. A3 [6 B LockMemories(NewsScript); 3 H" {8 g; c* s
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); % l: |9 @2 f% V) x
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
5 @* S8 | |. i6 U# U+ W3 Q. ]4 j if(NewsScript.m_pScript!=NULL) + W& y5 S4 @" ^# D0 N% G
{ ( F4 @2 X+ x* G7 ~. K# [
//再将刚插入的记录读出来,使该Query与该条记录关联 - r+ r& W8 a n" t5 O5 P
strSQL1="select file_id,script from content where file_id='"+ 2 ]7 z* d2 n6 `# b' r- z1 H3 l
m_szFileID+"'"; ! J( a' t) `3 \& K0 B \1 }
//允许该Query写
3 ^3 h5 U/ f9 \. Q1 ?2 O2 i dmStoryEditor->qryExec->RequestLive=true;
+ Q$ |4 X& o) D9 `: [% |$ Q7 M% x dmStoryEditor->qryExec->SQL->Clear();
* j- H: |. g1 V- V0 J dmStoryEditor->qryExec->SQL->Add(strSQL1);
2 G! L$ p6 p9 H& L8 X' e dmStoryEditor->qryExec->Open();
: k! H. t! D8 V9 q dmStoryEditor->qryExec->First(); ! c5 H3 t; [- V' m
//将该Query置为可写 ' X7 F- d6 t) K5 H' p% q
dmStoryEditor->qryExec->Edit();
% Q* L; u. [+ \# c pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
: R0 J. M/ p4 K" ]1 A" O qryExec->FieldByName("script"),bmReadWrite); . |3 ~4 d1 P& n4 j0 P
pScriptStream->Write(NewsScript.m_pScript,
& ~$ h: X! h! t( y( S! W NewsScript.m_lScriptRealSize);
. X# W) r& L- g; [1 B( z* @8 h dmStoryEditor->qryExec-> ost();
6 ]7 D! [! ]% \0 E dmStoryEditor->qryExec->RequestLive=false;
0 H# O1 i' q6 d0 y# ^6 s4 K3 K delete pScriptStream;
/ l: J3 M3 U0 C- z# ] Z }
$ k0 Y" T6 J* o* N x+ w GlobalUnlock(NewsScript.m_hScript); 2 ?! M+ N4 o/ j6 B4 o
UnLockMemories(NewsScript); |
zan
|