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

我的地盘我做主
该用户从未签到
 |
[摘自 水木清华站]
) m. L+ r2 u: u! k8 {
) @: B2 x$ Y- _. t8 i9 C, V
: _5 u9 P1 M9 J9 s0 r. h$ r对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
6 v+ W9 p! i9 ?7 ?BLOB字段的读取:
" f0 C6 f6 B( T9 y. _3 c7 \ TBlobSTream* TemplateStream; " W9 L2 y6 f, V7 E' d- Q* c0 L2 s
char* TempPlatePtr; : O$ e' I6 v, X: o
- G! M, M6 t( S2 }1 q TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName 0 w! f1 l: x8 j% {% e
("SearchTem"),bmReadWrite);
' l, Z2 I$ E4 m y7 Q" [% y8 Q" D2 U: Y& d TemplatePtr= new char[TemplateStream->Size]; ! F( v6 J' u' k+ V5 `
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
& x2 P. U- H2 O* ~/ ?) h0 @9 f9 _
: m# y' @' x* l/ q( pBLOB字段的写入: / n9 Q/ }( s% d# Q
TBlobSTream* TemplateStream;
# C" k |% f3 `( q" P! b I char* TempPlatePtr; + ?" z7 n b% F5 Y
! ]' ~; s5 |- m
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName $ H0 _4 e! m- w' F
("SearchTem"),bmReadWrite); + B; ^! u. ~3 U2 C
TemplatePtr= new char[TemplateStream->Size];
" b/ Q5 m% c1 V2 S8 j TemplateStream->Write(TemplatePtr, TemplateStream->Size);
. J& N/ z' T& c# k6 Z1 p
8 `2 U2 N s$ ~# X5 b7 T! t________________________________________________________________
% B$ y- \9 p5 m* I补充:
2 L, P; l$ N; z: c, I8 H获得字段的大小用函数datalength 2 ~" M" K/ V% }
# Z8 f$ W3 x9 _; t2 s
SQL Server端要作一点设置:
, K. e: n5 Y/ WBy default, WRITETEXT is a nonlogged operation. This means that
) ^; b( H, C, d0 d) o9 h+ Ntext or image data is not logged when it is written into the database. / X0 z; y* `5 R# q2 `8 _
To use WRITETEXT in its default, nonlogged state, ( i; @8 M2 f7 `) q% E9 T4 w! j
//注意!! " `& v" c5 U2 z. L) D
the system administrator must use the sp_dboption system stored . i! K/ \" R: K& ^+ q, _ p* w
procedure to set select into/bulkcopy, * H, A$ [8 y! |4 y' Y
// 1 P4 F% T" c/ V/ k& T" @
which allows nonlogged data to be inserted. 8 ~7 m! z3 ?2 e
- ?: W& T3 W9 V$ G0 O! [做了试验,直接写SQL语句好象不行.
8 F0 t# i; M/ e/ z t____________________________________________________________________
$ n6 }* n# p2 c& [1 f 一些注意事项和一个例子
( L- O0 B* y- B7 H( a在写入时: " i6 f/ k+ _) \, h# y A
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; * u- s: b: R% N8 o
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
3 U: `$ }5 }( b g% a使得TTable(TQuery)是可写的.
/ S( r+ w4 D; \5 m5 _, ~+ u
- ~0 `3 `, h5 k0 T下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 9 v. e, A6 ]5 b
script为一个BLOB字段:
9 z- ~8 { N8 |, N TBlobStream *pScriptStream;
* L0 U( h5 m- p+ X //插入一条记录 1 t2 J7 R, ^$ O4 z$ O' V
strSQL1="insert into content(file_id,script,key_image) values('"; ) |7 @$ ]0 Q8 E- x) n
strSQL1=strSQL1+m_szFileID+"',null,null)";
6 H- d9 W* O$ Z' v4 r* x! C dmStoryEditor->qryExec->SQL->Clear();
8 P! F3 g4 `- S# C8 t dmStoryEditor->qryExec->SQL->Add(strSQL1); 1 h: d2 N i0 Z2 _% i, \" |
dmStoryEditor->qryExec->ExecSQL(); ; g2 |2 R9 ~1 S1 ` K0 p
dmStoryEditor->qryExec->Close(); 1 e3 q0 H2 P8 Q* _
//整理要写入的Blob数据
2 i( o( t* W0 e# m! ~" E D+ n2 q LockMemories(NewsScript);
( I! ~7 f$ Z6 ]7 W) W7 r NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); 4 k* _3 o/ K; H1 C) O" J
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); [/ W% g8 P) [
if(NewsScript.m_pScript!=NULL) 3 ?: p2 O& G3 r$ l0 z$ ?
{
' ~" l/ r' b7 |- T8 [1 L //再将刚插入的记录读出来,使该Query与该条记录关联 , i5 \7 D" G' w q
strSQL1="select file_id,script from content where file_id='"+ , }" y% Q* [1 ?. u6 A7 J
m_szFileID+"'";
6 d$ I% d3 R Q% W% H) T //允许该Query写 ' D) y9 D' E/ k4 |+ N
dmStoryEditor->qryExec->RequestLive=true; 7 Q* F# W" | l
dmStoryEditor->qryExec->SQL->Clear(); 7 y6 J# D8 W5 {: O$ x4 j3 c L9 P
dmStoryEditor->qryExec->SQL->Add(strSQL1);
4 J8 H, b; a! m2 @5 m4 \4 Q6 j dmStoryEditor->qryExec->Open();
& W' {2 E o" I5 D/ y' @ dmStoryEditor->qryExec->First();
# J3 U) ]2 d( A# u% w* O1 } //将该Query置为可写
" N H, K/ B- m dmStoryEditor->qryExec->Edit(); d$ S+ f8 K/ e# O5 b
pScriptStream=new TBlobStream((TBlobField*)dmStoryEditor->
5 s3 S: O7 `( M3 A+ L qryExec->FieldByName("script"),bmReadWrite);
* D$ z- A4 ]$ b pScriptStream->Write(NewsScript.m_pScript,
4 R O+ P% R/ |* s5 n% q NewsScript.m_lScriptRealSize); S& _+ Z* t q
dmStoryEditor->qryExec-> ost(); 0 J7 }. a! T% c7 K6 ?5 @1 a; i0 U8 H
dmStoryEditor->qryExec->RequestLive=false;
( b: [+ F- C) u" S3 K0 B& W% ^) N3 @" S delete pScriptStream;
. ?% q: P, D9 G$ O } * k3 |5 Z4 r$ l/ a
GlobalUnlock(NewsScript.m_hScript);
' p8 j. |6 \, Y5 l9 m UnLockMemories(NewsScript); |
zan
|