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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]! F e8 P3 w. a) E7 B% f, c2 D7 {
0 L! n) @0 @1 \4 |
; r" J/ y# K$ W/ E( `* E9 R
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: _6 V( T# F5 z2 s+ d8 j" y4 Z
BLOB字段的读取:
' \' j7 ]; K+ V- T Q7 ~" H* S TBlobSTream* TemplateStream;
/ V2 {; u4 d" T3 z9 V" H& m9 F Y char* TempPlatePtr;
* I o) @* c2 R( q: P- J 4 @: z$ U: f2 \8 ^% \ M
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
. x7 l) Y- B; ^" G3 C- ~ ("SearchTem"),bmReadWrite); 2 Q6 E9 m, ~* ^' \/ C2 M4 s: v1 ?
TemplatePtr= new char[TemplateStream->Size];
% P$ Z1 U9 h; A, Y' Z) y) Y" x TemplateStream->Read(TemplatePtr, TemplateStream->Size); ) I# `! I) \6 t# X) V
t# M4 Q. Q4 d# H
BLOB字段的写入: . }; h4 U- s* N6 |" Y# ]
TBlobSTream* TemplateStream;
`% M3 w* M4 ~! S2 s char* TempPlatePtr; + ^! }- P4 J1 y$ M* g' U) Z
$ b: B8 Z' ^% O" X! W0 l TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName - H0 j$ _' `0 v
("SearchTem"),bmReadWrite); ! C- n/ d! o9 H1 D
TemplatePtr= new char[TemplateStream->Size];
5 J y# C% {2 ~4 G; @ TemplateStream->Write(TemplatePtr, TemplateStream->Size); " d8 B, k" H6 Q2 R! r2 F- g$ N' u$ E
5 k, I7 f+ E7 }# q% F( n' c' }1 M3 e
________________________________________________________________
' R: r/ e( s0 r! F补充: & M: q* C! x2 } _8 n) p2 H
获得字段的大小用函数datalength
y, b& }! T3 s" \2 [1 g% i : k" v2 s( h6 T6 q
SQL Server端要作一点设置:
+ H$ D; Z3 C" O1 q1 Z; q* HBy default, WRITETEXT is a nonlogged operation. This means that
9 K5 ]2 T3 W; c, P4 q$ d0 |text or image data is not logged when it is written into the database. & q" ]2 S. j( ^# H+ g2 y) {: ~
To use WRITETEXT in its default, nonlogged state, 7 t8 V' T: x5 ^
//注意!! 0 e6 c6 S5 U7 N( ^; j
the system administrator must use the sp_dboption system stored
+ L; V m, P% q! C3 F Z* Uprocedure to set select into/bulkcopy,
, A! B* d, p! W& }4 r# I/ |//
' _! T( `9 I( S& @, T! V2 iwhich allows nonlogged data to be inserted.
5 J+ ^8 ~9 c! N. a 0 `) F# `4 D9 D; G) n! V; W8 K4 ~
做了试验,直接写SQL语句好象不行.
4 P% m9 Z* |" B4 T. R____________________________________________________________________ ) x, K9 m7 ^0 ]( ~
一些注意事项和一个例子
% n- k, s# ?1 L, ]3 A; L在写入时:
# |" E% ^! ~% m(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; 1 W% Y0 T2 `' A9 u
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; " ^: ]0 g% U( H$ r
使得TTable(TQuery)是可写的.
7 |9 d( P' z, I& R$ c 9 a! V( |: s/ K8 G8 p# b
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, : D6 ~# g6 R) Y% V2 f* ?9 c; N
script为一个BLOB字段: - |+ p' Q. x# H- f5 t# z: D% a/ M
TBlobStream *pScriptStream; ; c+ Y3 G. e: u
//插入一条记录
, B5 _6 I8 s7 h6 x, z strSQL1="insert into content(file_id,script,key_image) values('";
S0 w# l7 J$ g. t) d- Y5 X( | strSQL1=strSQL1+m_szFileID+"',null,null)";
% ]) E$ W; P" p# C8 ]8 R dmStoryEditor->qryExec->SQL->Clear(); / b1 f& o' ]. k7 d+ C# G
dmStoryEditor->qryExec->SQL->Add(strSQL1); ' P: s4 }/ P! ?' _9 M/ V# G
dmStoryEditor->qryExec->ExecSQL();
+ k5 n) [1 @+ _9 R) R dmStoryEditor->qryExec->Close(); ' z3 Z3 \1 r; T l/ ~. {
//整理要写入的Blob数据
- O3 l0 _7 z2 t y8 h LockMemories(NewsScript);
: i- O" a3 ?% P0 S NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
" S) u) R! W$ h* G& d NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); ( ?* Y- [( o0 v" }1 b+ W
if(NewsScript.m_pScript!=NULL) ; V' m" `: G7 _: t' X7 X
{ * J& d1 W' F C n5 f: N
//再将刚插入的记录读出来,使该Query与该条记录关联 ! w$ H4 ~0 g; L/ Z* d% Q$ } J
strSQL1="select file_id,script from content where file_id='"+ 7 d1 {, W) w- V3 ~* n
m_szFileID+"'";
) _2 R! T" @( R: _$ b4 r //允许该Query写
0 R- W( |' j2 d dmStoryEditor->qryExec->RequestLive=true; 0 s6 P& Y/ e- z+ R, @: }: D
dmStoryEditor->qryExec->SQL->Clear(); : ?6 ~# g/ l* w* ? g. z0 m
dmStoryEditor->qryExec->SQL->Add(strSQL1);
r8 u6 T, a2 M dmStoryEditor->qryExec->Open();
; R0 H8 n, S# d9 D9 H2 b dmStoryEditor->qryExec->First(); 9 A5 l- s5 R# C7 p7 a; r) q! G
//将该Query置为可写 ' w9 }1 U+ ]4 k/ L- M
dmStoryEditor->qryExec->Edit();
9 r$ f- T. M Z$ ^7 y pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> + K" d. D2 A# n& F. m
qryExec->FieldByName("script"),bmReadWrite); ; C# g6 v/ ?2 C+ x' e
pScriptStream->Write(NewsScript.m_pScript, % I0 o* I% [( {; \' Q
NewsScript.m_lScriptRealSize);
7 j; i/ l3 e [& ? dmStoryEditor->qryExec-> ost();
: A( { W5 a) b s& B- W& M% ` dmStoryEditor->qryExec->RequestLive=false;
# R- h! D8 M0 m; @5 G delete pScriptStream; + n! g8 n( v; n0 O. U
}
3 I/ w A& l, f3 e4 l GlobalUnlock(NewsScript.m_hScript); 1 ^6 G) J, h9 a
UnLockMemories(NewsScript); |
zan
|