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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]' `0 E8 |- o: [% T
' k0 w; [4 O R4 i1 h8 S
, {# W8 u, X, k x6 `/ T/ |4 x对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
* x0 b. D* ?5 D+ i' m0 QBLOB字段的读取:
1 i' Q* T0 I0 r9 x8 h TBlobSTream* TemplateStream; ' L$ M0 d4 D1 q2 t) R
char* TempPlatePtr;
) W# R5 Z- |6 b5 G9 s" l: n + s- f% P! |2 R" T" n
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
8 N1 [- C: j3 _, `! i5 q; x5 U ("SearchTem"),bmReadWrite);
5 J9 ~( C/ @; P( i9 | TemplatePtr= new char[TemplateStream->Size]; & f$ e1 w" y3 b1 v
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
0 P7 R- H) `5 {& {' c
3 Y6 g7 }" T" Q1 n( nBLOB字段的写入:
( W2 e/ ?- k$ S& z TBlobSTream* TemplateStream; ! O; R5 h& v D& |( b* N: o a+ R
char* TempPlatePtr;
- k0 t9 p1 F+ }5 L; r3 K: V 2 d/ n/ C* r; b2 P7 t
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 9 g( A& G9 D) R9 G* v
("SearchTem"),bmReadWrite);
$ v2 O3 T8 ?" W6 Y# c/ D8 k0 v" _ TemplatePtr= new char[TemplateStream->Size];
2 j& u' M3 l Y% D, m TemplateStream->Write(TemplatePtr, TemplateStream->Size); + W* B3 D! A# X0 F' x+ C
0 u3 Q* b7 c$ p, e$ m________________________________________________________________ ' `0 K) l( v! K3 K! g' Y
补充: # Q/ v- T. I7 z N
获得字段的大小用函数datalength
5 p M+ T2 I$ ?4 N8 e' c
: s% t8 y" g' m3 v1 mSQL Server端要作一点设置:
5 _3 Y3 m* c" I: V. ] z( S+ EBy default, WRITETEXT is a nonlogged operation. This means that
3 b/ z2 P+ J4 S$ g6 _$ J- _text or image data is not logged when it is written into the database.
) s* Y3 O' V& N# l# @To use WRITETEXT in its default, nonlogged state,
; E* r% I/ N' Y6 ]7 U- J6 z//注意!! . K; n H- Z4 M2 E: V# a5 `3 i! ~
the system administrator must use the sp_dboption system stored ( Y) q7 V4 T+ n" b6 J7 X- z0 o
procedure to set select into/bulkcopy,
m' t5 _1 L! b// 8 v/ T% w* C$ U6 W7 Q0 M
which allows nonlogged data to be inserted.
! c9 @" S, V0 ~& |8 @* K9 n1 k ! U# s4 R- @! \- g H
做了试验,直接写SQL语句好象不行. * Z& G- W) ~8 r0 Q6 E- N( C
____________________________________________________________________
: c7 U. n j5 w% F0 w/ H 一些注意事项和一个例子
7 x3 c! M; X9 j" e, Z1 a! E& Q在写入时: % V9 y Q( b, r9 p1 F$ R) e- O
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; - L. C4 U6 u. m& i. D" }0 g3 I- c
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; / \2 m" }; h4 H- V# @
使得TTable(TQuery)是可写的.
7 U3 e; t2 [( F* T; ^
6 P M2 p3 t. R I; j" `: `下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
: \( C; B2 o% R- z) }script为一个BLOB字段:
4 ]- p/ R3 O% t$ @, y/ O6 W4 X# n TBlobStream *pScriptStream;
1 f/ _3 a; Q$ e! _* `: V2 ^ //插入一条记录
. d9 C; U3 ~2 Y/ t* r strSQL1="insert into content(file_id,script,key_image) values('"; 5 n1 b) V+ e" w/ P# J" k
strSQL1=strSQL1+m_szFileID+"',null,null)";
1 i/ Z! Y8 P3 x dmStoryEditor->qryExec->SQL->Clear();
* I0 Z6 J# `8 k; g dmStoryEditor->qryExec->SQL->Add(strSQL1); 6 C/ }) K x; @3 |$ L* ~6 C
dmStoryEditor->qryExec->ExecSQL(); . p1 k) l) h4 z/ W7 }( a
dmStoryEditor->qryExec->Close(); ; D) C* q) i+ j2 A# G: Z
//整理要写入的Blob数据 2 `8 @# y& W$ ?+ o5 U+ X
LockMemories(NewsScript); ) `$ f. Z8 t8 _5 M
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); ! c. j, X: H6 D1 L9 m6 y5 c
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); 1 L9 m0 k* \: L" X7 e$ W% ^# z
if(NewsScript.m_pScript!=NULL) ( k( _9 D3 [2 h ?3 G5 \' s4 \$ [3 B
{
- {( D5 q$ l* H/ h //再将刚插入的记录读出来,使该Query与该条记录关联
& Y" A% S. d, Y! k strSQL1="select file_id,script from content where file_id='"+ " C3 m1 c+ t2 l) ]5 ^& ^
m_szFileID+"'";
/ S; j' i# q( F7 w+ \4 R+ q5 y //允许该Query写
( L- ^! ~- M2 s- R' K: K dmStoryEditor->qryExec->RequestLive=true;
0 E! p$ V7 @$ g$ ~ dmStoryEditor->qryExec->SQL->Clear(); 2 F7 x1 F2 P! m- Y
dmStoryEditor->qryExec->SQL->Add(strSQL1); 6 i' F* {8 O+ A
dmStoryEditor->qryExec->Open(); 6 a& D# l8 ]7 d! c' t: ~
dmStoryEditor->qryExec->First(); 0 e6 g; ?% S" V5 s6 f, ~: V
//将该Query置为可写
( m* I) `* J" R7 V, ~9 k; b dmStoryEditor->qryExec->Edit(); 9 N$ y$ E0 `7 {
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
2 D7 C. j0 X( f3 U, K I3 k) I Q0 \ qryExec->FieldByName("script"),bmReadWrite); ' m4 { e, i% v" t$ B; I& _
pScriptStream->Write(NewsScript.m_pScript,
6 a$ j I1 B5 k* l* a NewsScript.m_lScriptRealSize);
/ M1 M. s* ?- D dmStoryEditor->qryExec-> ost();
, ^6 o" N5 M( S \ A7 o2 w dmStoryEditor->qryExec->RequestLive=false;
a: e& H( @+ ^1 w9 n2 Y delete pScriptStream; 2 ^1 x% C5 ~ a- a- e
}
8 l' N2 p3 q/ \: s& O GlobalUnlock(NewsScript.m_hScript); 3 q, ]+ y% |1 f/ Y& r
UnLockMemories(NewsScript); |
zan
|