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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]
: \! C1 x: L; l2 F) [
6 C: W& W& [8 {, B/ J' f: y V, t/ e
( i6 T( f+ ~# x对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
% ?! M* W1 T/ G0 lBLOB字段的读取: 1 I9 w0 S. a- G' f% a
TBlobSTream* TemplateStream;
T. k0 A# t6 [( z char* TempPlatePtr; . G/ F$ i' B1 W$ d
, J6 q3 O" a( p, K TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName $ ~% @9 l# e# H1 E. o! w
("SearchTem"),bmReadWrite); * o# k$ G+ B Z+ Y8 L H$ t
TemplatePtr= new char[TemplateStream->Size]; 6 w4 g q9 a8 d' N& W. b3 Z
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
3 J( j/ v/ Y( q) H1 S 9 g5 [5 b3 Q4 R0 s* s+ F* C
BLOB字段的写入: - u0 T( K) M0 X8 G
TBlobSTream* TemplateStream; 8 i& F7 }0 z$ S' p% b
char* TempPlatePtr;
Q# e( R' _2 m2 ~' m& @ 2 B6 u3 G" X: Q4 x" m: V
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 7 ~' o7 a, Y$ v- @7 m! g0 `
("SearchTem"),bmReadWrite); " f9 G( k8 y, H' J) Y- H$ O1 B
TemplatePtr= new char[TemplateStream->Size];
h9 ]3 T: a" t; c. _) v2 ]8 Y TemplateStream->Write(TemplatePtr, TemplateStream->Size); : ^' l! c# g( c# y5 O# {
: d- }+ B5 }# ]________________________________________________________________ $ M7 X, B2 t$ ^9 d+ D+ q
补充:
( [: B4 e8 g# B获得字段的大小用函数datalength
" j4 ~/ N9 f. |7 \ 3 h, S9 k' b% S) p3 J- J" f
SQL Server端要作一点设置:
* T2 U* H- E7 jBy default, WRITETEXT is a nonlogged operation. This means that " J1 O, m' _$ A; U) ^
text or image data is not logged when it is written into the database.
" |$ D% C. Q& L! X/ h( YTo use WRITETEXT in its default, nonlogged state,
1 V! \" T- f. c+ g( d# Y//注意!!
0 f2 \- e* w0 ?7 d% Lthe system administrator must use the sp_dboption system stored
: |: X' Y) t h& eprocedure to set select into/bulkcopy,
% p4 d- B9 y' ]//
) K. [1 R n3 q3 G& Gwhich allows nonlogged data to be inserted. 8 @5 w; L! X' F8 d( K. V/ L! ?
3 Z) I( _5 b1 A1 E. m- |
做了试验,直接写SQL语句好象不行. 3 o6 z% F- t, L1 V8 W
____________________________________________________________________
$ r0 c8 h2 t3 ^, a" f$ `5 a ? 一些注意事项和一个例子 & _4 s7 \" w$ Z# Z& ^" C
在写入时: % t7 R3 A4 g: p3 k5 ~
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
1 E; y) h, `$ Y(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; * ?$ j4 }7 q, P! p# A
使得TTable(TQuery)是可写的.
* [: M; R0 x8 `2 T# J5 V E 2 ?0 s) w. C; _# P
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
. c$ `' J" E% q/ Vscript为一个BLOB字段:
- c5 |) K0 s' i1 h: P* R' W TBlobStream *pScriptStream;
/ Z7 \$ p4 g: g3 o1 T4 c4 M1 B9 a0 J //插入一条记录 ( Y" c$ f$ a: q- F" T& P, Y8 J
strSQL1="insert into content(file_id,script,key_image) values('";
; a8 \1 B" ^6 R! ?8 E: V strSQL1=strSQL1+m_szFileID+"',null,null)"; 5 U3 T$ N) M- ]6 I
dmStoryEditor->qryExec->SQL->Clear();
) i: ?+ C5 G i' m0 y dmStoryEditor->qryExec->SQL->Add(strSQL1); 7 z* h0 i$ [4 m# e; H
dmStoryEditor->qryExec->ExecSQL(); 3 a1 w% b& }3 D9 p7 y1 [1 M* W
dmStoryEditor->qryExec->Close(); + y5 M0 C( A1 r5 G4 p
//整理要写入的Blob数据 / }( F6 t* I& f4 _$ y
LockMemories(NewsScript);
; C8 w9 ^5 A( L6 z6 M$ H NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
- [( J: a0 m& n NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); * T) p& z6 T& v
if(NewsScript.m_pScript!=NULL)
8 c+ U- T/ c2 Z# E/ `4 | { & N& v. T: ~1 G
//再将刚插入的记录读出来,使该Query与该条记录关联 9 l7 ^3 w" `$ a1 T+ ]% K
strSQL1="select file_id,script from content where file_id='"+ 3 ^$ c+ G9 o5 R
m_szFileID+"'"; / ~: C. E; C8 C; i
//允许该Query写
# j0 V- ~$ T- \3 C/ U dmStoryEditor->qryExec->RequestLive=true;
- Y' z) J. }( N, J dmStoryEditor->qryExec->SQL->Clear(); 9 E- ~' W" Y N) S, x, J2 f
dmStoryEditor->qryExec->SQL->Add(strSQL1); 7 q- g' J2 z/ U0 i8 K9 z- D
dmStoryEditor->qryExec->Open(); $ u5 ~: `8 \0 [$ K( Q
dmStoryEditor->qryExec->First();
$ M* T* z ^/ M, u# a* n5 ^ //将该Query置为可写
/ ~( j- F* r o9 G dmStoryEditor->qryExec->Edit(); * O3 \# l/ A: o7 t7 q
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor-> # M, _1 B4 u8 p& b. u7 t
qryExec->FieldByName("script"),bmReadWrite); ) V) _7 | Z" x9 J5 b. N! { k' U
pScriptStream->Write(NewsScript.m_pScript,
; @2 z# A& y/ c/ V! M, M NewsScript.m_lScriptRealSize);
- g- F# n/ r, Z$ f! c dmStoryEditor->qryExec-> ost(); 4 @0 @' ]; M6 ?! V3 I
dmStoryEditor->qryExec->RequestLive=false; 2 P8 b \6 E4 g, d) D; B# M1 A5 _
delete pScriptStream; * C; D0 N: _. F2 C0 u3 T
}
4 s1 p1 Z" m' x( j' q, m# k/ e1 O. ~ GlobalUnlock(NewsScript.m_hScript); % z Z4 d8 E- U l3 l6 c
UnLockMemories(NewsScript); |
zan
|