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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站] R) p* \' w* T- R/ B
1 |3 O# e4 x) z% p' r$ g $ P+ l, V; ^* {* T
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: 5 \2 w t9 B* o, d4 d6 N7 ^
BLOB字段的读取:
+ ^# D+ a! B: H2 ` TBlobSTream* TemplateStream;
i6 |- P( b$ D" j7 d char* TempPlatePtr; ( f4 L3 t: n- f0 E5 f8 i5 T% y! b
) e5 S3 p3 { }: ]
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName ( [$ n* \* |5 X$ V2 P0 G8 h
("SearchTem"),bmReadWrite);
+ i @ ~7 F; E# }1 G X# c TemplatePtr= new char[TemplateStream->Size];
1 z% A9 R9 k! R' g0 b, w TemplateStream->Read(TemplatePtr, TemplateStream->Size); 6 L7 h# }9 M& C6 q% j! Y
$ H! q4 R% g, V0 EBLOB字段的写入:
% U, V% T! K3 M9 ^* y TBlobSTream* TemplateStream;
$ Z5 I, C, O1 f; l+ n) V/ A char* TempPlatePtr; & s" o) w4 U" A5 z8 W5 _0 G4 o
! f* K4 f! c* E7 ~- `- W8 e$ S
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 7 \ R/ d! l4 z8 T. f, H5 s
("SearchTem"),bmReadWrite); ) y" s0 e/ X! a/ g6 S* K
TemplatePtr= new char[TemplateStream->Size];
2 [% f# K0 i) |6 y- N) g( w TemplateStream->Write(TemplatePtr, TemplateStream->Size); 1 t! l( ?: I' v9 ~( {
" p7 r7 v Q. G. k4 B _
________________________________________________________________ & N0 L- r3 P1 S/ y; k& c7 Q2 q
补充: 0 y. ]" F: _4 J/ O- N. s
获得字段的大小用函数datalength
F& o/ s0 h- ^) Q 5 ]0 Y% ]# I; j: u. P' m( Q
SQL Server端要作一点设置:
* ?5 q3 {/ T% }7 L1 RBy default, WRITETEXT is a nonlogged operation. This means that + K6 _+ v' W* ^ L; i
text or image data is not logged when it is written into the database. ; m' H; Z* k0 H7 E- w( ^6 l
To use WRITETEXT in its default, nonlogged state,
" Y- t2 U% U( x! d( Q: N//注意!!
9 ]3 o: a4 Z) {" kthe system administrator must use the sp_dboption system stored
8 `6 S& |0 K y- P% ~procedure to set select into/bulkcopy, : z; a ~( Z5 _% Q- _
//
; Z0 `$ J+ w* l6 ^) _3 T4 qwhich allows nonlogged data to be inserted. ' i5 {8 K; ?) `: W7 c9 w
5 y9 m2 Y3 n1 `5 r5 y8 Z4 ~3 e$ Y, e
做了试验,直接写SQL语句好象不行.
' [ c" @( L7 S, f8 R6 S: k2 `) F____________________________________________________________________ - S, V8 s& T; E6 d1 W- z
一些注意事项和一个例子 ' J# b8 M7 a' Y
在写入时: + \' S B" J1 T
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; 3 o7 m2 d4 p1 R/ S9 U& |
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
, v( C/ ~2 T- P% f: c! t5 I! K使得TTable(TQuery)是可写的.
- e0 i }' Y$ z
W g0 e7 I& u4 o下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, : \4 S& h+ U# @1 Y6 T6 n2 p& }
script为一个BLOB字段: 9 P3 j; t! C! A0 u
TBlobStream *pScriptStream;
) ?+ ^8 M$ a; ~1 p3 A( H; U2 \ //插入一条记录
) ^0 \" P- o. _3 C. X% { strSQL1="insert into content(file_id,script,key_image) values('"; 9 z1 C$ A0 j* n) C' }
strSQL1=strSQL1+m_szFileID+"',null,null)";
( x- x& d4 o, _ A dmStoryEditor->qryExec->SQL->Clear(); . z( {+ h! V; O: ~+ y
dmStoryEditor->qryExec->SQL->Add(strSQL1);
9 a0 G3 @/ m% D" ^2 h; b: C- a w dmStoryEditor->qryExec->ExecSQL();
C, u2 @, k: S- u9 F; A" Q- l dmStoryEditor->qryExec->Close();
8 O* I" m9 F7 ~; E' w* q1 ` //整理要写入的Blob数据 R$ z1 L; G5 ~' ?) I5 B- Q
LockMemories(NewsScript);
0 Z& T! {& w% s1 x( Z' w$ ] NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); . x" x2 k0 n& L) V
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
' [) m3 L! j' j1 g+ t if(NewsScript.m_pScript!=NULL)
/ w7 F2 {# @! ]5 V {
" V. H6 [ e. ~5 P //再将刚插入的记录读出来,使该Query与该条记录关联 2 {( y: G- c9 c' `
strSQL1="select file_id,script from content where file_id='"+
' D! z$ J9 c( D' c3 o# s! M' { m_szFileID+"'"; 8 f$ M: ?/ h. m5 n& C+ o* L
//允许该Query写 . L! \' l7 T+ N6 u
dmStoryEditor->qryExec->RequestLive=true; 6 m% K& b- j- V
dmStoryEditor->qryExec->SQL->Clear(); ! e2 W0 F0 T; c7 E2 T" E
dmStoryEditor->qryExec->SQL->Add(strSQL1); , B* c9 l) d# I# O/ @& d2 q
dmStoryEditor->qryExec->Open();
3 H. t1 I. G7 h. [, i dmStoryEditor->qryExec->First();
. O0 n" ~. x& w //将该Query置为可写 $ q: j6 `5 i: J9 W" y
dmStoryEditor->qryExec->Edit(); / x7 L. x' o& E; H" L- C/ V- g
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
; t) @% q7 ^+ J- H( C qryExec->FieldByName("script"),bmReadWrite);
! ~' c6 a3 B! V& t) { pScriptStream->Write(NewsScript.m_pScript, ' g5 M* ]+ u _7 Z) C% p: W
NewsScript.m_lScriptRealSize);
+ q; T* a# |, {4 O) { dmStoryEditor->qryExec-> ost();
( _. n- ^8 p; z7 J. c' \$ ~$ }. i dmStoryEditor->qryExec->RequestLive=false;
. {1 q+ H* x3 n& \8 C delete pScriptStream;
/ I8 N8 t- Q9 O) d* S1 ?- R } . P) r( ~: @2 D
GlobalUnlock(NewsScript.m_hScript);
1 f8 [/ I/ p2 G' C4 h' c4 K UnLockMemories(NewsScript); |
zan
|