数学建模社区-数学中国

标题: 在 C++Builder 中,如何自定义属性 [properties] ? [打印本页]

作者: 韩冰    时间: 2005-1-26 12:32
标题: 在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]' P8 S9 w# Y' a' o7 V5 Z& q' y

: v6 u5 r9 j2 `( b  q        
& u' k# y5 T$ _+ c' v4 W对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
' k1 W) \$ H! b  hBLOB字段的读取: # ]) @0 i* S2 D& `4 L, ^
TBlobSTream* TemplateStream;
# w, C8 U6 ~* U8 ?: `$ [ char* TempPlatePtr;              
! R8 Q" F- p4 s. t
" L4 k) X; p1 j3 V% O( K/ a. [ TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
/ c+ s0 ]0 [! U( o6 X                        ("SearchTem"),bmReadWrite);
* V* K: p0 L" Z8 L* Z# e6 {) H TemplatePtr= new char[TemplateStream->Size];
9 ^, j9 o0 Z7 C6 q5 z6 a TemplateStream->Read(TemplatePtr, TemplateStream->Size);
% O+ Z: R  O+ i, s / h- k8 h% c5 S; ^7 _
BLOB字段的写入:
/ n2 {3 Q- r0 d; V- \ TBlobSTream* TemplateStream;
  s  e6 |6 C! s  U; K, {7 L char* TempPlatePtr;              
% X( E3 g" u2 j7 z) c+ z & A6 i: m2 v9 G/ ~6 O8 n
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 0 i- |* W! ?# F' F
                        ("SearchTem"),bmReadWrite);
$ S+ x# ~- ?* V+ W# J- Y* R8 t: X, s8 p TemplatePtr= new char[TemplateStream->Size]; % I. X- ^. O& }9 ?+ D) o' |
TemplateStream->Write(TemplatePtr, TemplateStream->Size); 4 l2 R4 i8 a' u

# [! d, T! D4 a) Z4 E________________________________________________________________
& l: `) J5 X, `$ U1 T( R补充: ' A* q/ U% F% D8 f2 ~8 y9 {
获得字段的大小用函数datalength # y/ K$ K3 l/ Y, K6 p$ T0 D% S# H
( l8 `. |- A* \& V# X
SQL Server端要作一点设置: 9 N% `8 f  \5 H# {! l
By default, WRITETEXT is a nonlogged operation. This means that  0 r, o: ]+ e2 Y4 ^/ G
text or image data is not logged when it is written into the database.  / f/ E/ `: H1 ]1 o- V0 s) n* d% n3 \
To use WRITETEXT in its default, nonlogged state,  
. u( n) \4 ~, G//注意!!
! e$ k7 e8 N! Wthe system administrator must use the sp_dboption system stored  ) ~/ ]  P) B5 A% R3 n
procedure to set select into/bulkcopy,  . b  e: ?$ u. B1 E2 o; W
//
; M! L0 ?2 H& nwhich allows nonlogged data to be inserted.
# c! F. {5 s( V( Z
8 d' l8 Z6 ~: s' ~做了试验,直接写SQL语句好象不行. , u' q- F7 O+ j# }5 f7 ?# d
____________________________________________________________________ 9 k# R! w! q) t& q. k# f
        一些注意事项和一个例子
1 y! V: a# F3 l6 c1 X在写入时:
# B2 a& J- v) s+ U% U( U* s) w+ r(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
$ Z; n3 o$ ]5 g6 J% l& T(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
; `+ S; j" J  e" w使得TTable(TQuery)是可写的. " O! Z8 M' T( L

" f- }! t, T7 a; q下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 0 Q' P7 a% l9 g; ?
script为一个BLOB字段:
3 e/ n0 I0 ?" W9 [/ f   TBlobStream *pScriptStream; 1 Q8 |5 _2 `( Z5 T8 s9 t0 ^
  //插入一条记录 % X! G- A" W6 z" w- [
        strSQL1="insert  into  content(file_id,script,key_image) values('"; , @' ~; ]5 T' h- V4 e  Q
        strSQL1=strSQL1+m_szFileID+"',null,null)";
5 u: D2 P) B/ |        dmStoryEditor->qryExec->SQL->Clear();
/ v% X/ r, u- i' ?: J        dmStoryEditor->qryExec->SQL->Add(strSQL1);
/ W% T" h( l4 A, V        dmStoryEditor->qryExec->ExecSQL(); - _) F( i4 O; H+ Z5 L- p5 n- H
        dmStoryEditor->qryExec->Close();
/ Q5 L" y( v: |  //整理要写入的Blob数据   
- G; ]! \; g$ x' E' H" J        LockMemories(NewsScript);
& V2 c$ }# X- v9 W7 v  M( U        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
$ {% O8 r" R% g/ j        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); 0 R6 i0 ^# p" V( H4 M
        if(NewsScript.m_pScript!=NULL)
' ~) @7 @6 l' r2 E  a        {
3 m% ~5 ?* I9 t   //再将刚插入的记录读出来,使该Query与该条记录关联 ( H, C* x/ B; |7 e0 ~9 _% o3 ]
        strSQL1="select  file_id,script  from  content  where  file_id='"+
2 i( T+ F3 ~) Y                m_szFileID+"'";
1 ]" F8 z4 C' \+ ~* c. Y   //允许该Query写
% V. f/ @3 u( ~. Z6 v+ U            dmStoryEditor->qryExec->RequestLive=true; + P; J& L. T6 T2 @: f" c
            dmStoryEditor->qryExec->SQL->Clear(); 8 F  C9 r$ I  B4 d2 {
            dmStoryEditor->qryExec->SQL->Add(strSQL1);
1 _* u4 P+ w; r2 e! h            dmStoryEditor->qryExec->Open(); * J3 \9 V+ C( Z6 ?2 W+ P, U; ?+ W
            dmStoryEditor->qryExec->First();
0 k; J7 ]- `2 U   //将该Query置为可写
" F0 m# S7 [$ l. i0 P5 q            dmStoryEditor->qryExec->Edit(); # D3 Y* u" V) S# ]) G
            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor->
3 u: p' W5 y- r2 r& E" ^& ~                                qryExec->FieldByName("script"),bmReadWrite);
# w& a4 e8 E6 {* B" l            pScriptStream->Write(NewsScript.m_pScript,  4 t) Y3 k  c5 j9 y
                                        NewsScript.m_lScriptRealSize); $ i3 y8 a$ m/ O; A9 }
            dmStoryEditor->qryExec-&gtost();   m9 T# ~( }3 t# b3 Y/ o2 ]
            dmStoryEditor->qryExec->RequestLive=false; $ r, J! S9 }2 b/ K6 ^
            delete pScriptStream;
, Y) c6 A) U+ b       }
7 V) H$ t9 e& q9 D! ^. `% e       GlobalUnlock(NewsScript.m_hScript);
3 |* h# i; P6 k       UnLockMemories(NewsScript);




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5