数学建模社区-数学中国

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

作者: 韩冰    时间: 2005-1-26 12:32
标题: 在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]
# V: `' ]1 Z% C4 w : ^/ p9 k7 d2 W, O  b
        + M: b7 \* ^9 I5 y: {- r8 g
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: + W3 G2 \/ b( C  ?# k# b0 R
BLOB字段的读取:
  h* `: S2 t2 I% z: _: a7 Z TBlobSTream* TemplateStream;
' y+ ^6 f- ?3 D# W char* TempPlatePtr;              
% C2 T3 D" T8 r+ t1 C : Y. x- p, c) E. \" A4 j
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 2 |! O. d2 \. y# Z7 w
                        ("SearchTem"),bmReadWrite);
. T" W. y7 t" `& C+ V TemplatePtr= new char[TemplateStream->Size];
9 P1 ^- A* a4 Y9 [ TemplateStream->Read(TemplatePtr, TemplateStream->Size); 8 H' b# ]( `/ S8 {4 a& _

) \( U, z/ h$ b  U$ [. I/ }% SBLOB字段的写入: ' p/ C  i: `$ Y
TBlobSTream* TemplateStream;
; J8 R. I8 l/ ]" a5 H( n6 x+ s char* TempPlatePtr;              + E+ |; Z- ~  Q6 s1 O
  [2 }- B3 O: T2 {" h+ K$ q
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName , E% W) \- N; \+ P% Y, [
                        ("SearchTem"),bmReadWrite);
3 K* E5 k& K( g' _9 v: a! B8 _, [) [ TemplatePtr= new char[TemplateStream->Size]; & Z0 w1 s' S) z! M
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
( B  Y. O5 X  f9 V& G 1 Y/ o% D, |& i) f2 F  m
________________________________________________________________
" X: g# `! ?7 @! q3 K& X" d补充: : S0 P; m/ m: B, N7 X
获得字段的大小用函数datalength 4 \/ n" o1 C2 V
! J# y9 _1 u) F  L# M$ w& x' r3 r
SQL Server端要作一点设置: ; g* f) u8 _& `, L
By default, WRITETEXT is a nonlogged operation. This means that  ' ~/ o4 Q1 B) _5 z
text or image data is not logged when it is written into the database.  
) \$ k0 _0 {" ~2 _! r3 Y4 H. a+ JTo use WRITETEXT in its default, nonlogged state,  
8 i, t" c; v* a0 U//注意!! 2 v  \; a& a& L: N% J% a6 C
the system administrator must use the sp_dboption system stored  
8 |6 E8 m8 x3 T- }( }/ @procedure to set select into/bulkcopy,  % N5 W# Y% u5 \1 o% h" B
//
: |$ M) E( o7 k/ c. _* dwhich allows nonlogged data to be inserted.
, Y" D/ D4 w% V+ I8 @  B% \, h
7 |# p" u  C7 l* H' a. G5 X  z( {做了试验,直接写SQL语句好象不行.
# e% T1 A& u) D8 A) S____________________________________________________________________ 9 _4 V/ a. j" ?
        一些注意事项和一个例子
0 ?6 L# W. L$ S- y3 Q0 ~在写入时: 6 F; y$ X2 Q' n8 h# U' `6 B
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
0 p/ k, F/ Q; |4 G0 F+ z) g(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
) m3 i3 U" M4 d使得TTable(TQuery)是可写的.
+ J7 F  r% e& L% Y
0 b$ I  M, v& e0 \' a下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, ; M. P; l; g- w( {# E
script为一个BLOB字段:
+ Z+ a1 W5 J# I" d+ t   TBlobStream *pScriptStream; - z+ R" Q7 B* B+ `
  //插入一条记录
  V* G8 U+ l" K3 y% H        strSQL1="insert  into  content(file_id,script,key_image) values('";
) D- B6 `- I0 D3 y: P* @* Q        strSQL1=strSQL1+m_szFileID+"',null,null)"; 0 i6 w8 h) I* K) W# c; a
        dmStoryEditor->qryExec->SQL->Clear();
! y: E' Y$ H3 d. [, M% J2 e# l- @% d* r        dmStoryEditor->qryExec->SQL->Add(strSQL1);
9 q, H9 l* K( w, U$ l: y! F        dmStoryEditor->qryExec->ExecSQL();
: ^; n2 G( ^/ K" y        dmStoryEditor->qryExec->Close();
( e$ U/ F/ t9 {! e: ~+ Q  //整理要写入的Blob数据   8 X* X9 n+ p; H0 ~. A" m( {4 b
        LockMemories(NewsScript); " b$ t3 Z! D5 r, u
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); 5 a/ I- Y) e* i9 ?" v% U: e3 S, ^
        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
7 m, V0 w: @+ D" G6 A2 _        if(NewsScript.m_pScript!=NULL)
9 i/ b7 \. h6 a* E+ ^1 x1 [. ?" M        {
# T% ^" t; `% q2 e' i   //再将刚插入的记录读出来,使该Query与该条记录关联 ( c0 w" R2 T# \+ a/ {/ S* t
        strSQL1="select  file_id,script  from  content  where  file_id='"+
% U% u6 R, l# I9 o( i                m_szFileID+"'";
& Q; J3 W) y; F3 l2 `5 r   //允许该Query写
% j6 `. A; E  H1 \$ _            dmStoryEditor->qryExec->RequestLive=true; 8 H- o5 ^( c" E- p: E2 ^7 b
            dmStoryEditor->qryExec->SQL->Clear();
2 [  c9 }% z/ @7 R            dmStoryEditor->qryExec->SQL->Add(strSQL1);   F3 s. J' g: X) M6 }
            dmStoryEditor->qryExec->Open();
( H2 P$ N. F+ }8 F, l6 e            dmStoryEditor->qryExec->First();
: v) r) x+ f' y6 K: c* Z1 d( V2 m   //将该Query置为可写
8 j6 M/ X# @0 }; {( a+ H7 O            dmStoryEditor->qryExec->Edit(); 3 u* [1 m8 \2 J. F
            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor-> ! D% q, d/ N" A8 v  i* f
                                qryExec->FieldByName("script"),bmReadWrite);
) ^! [0 X6 W( j0 z+ u            pScriptStream->Write(NewsScript.m_pScript,  % V6 e( h; M; |9 o- ^) k
                                        NewsScript.m_lScriptRealSize);
9 P/ m; A% X3 \8 u. H            dmStoryEditor->qryExec-&gtost();
  K: E3 b& m* ?! C            dmStoryEditor->qryExec->RequestLive=false;
+ Q* S: u  k, |            delete pScriptStream; : S$ X4 _  `' U' A9 v' r3 w
       }
) F( F( A4 c/ v& K       GlobalUnlock(NewsScript.m_hScript); - P* Q: i8 R6 j, |- K
       UnLockMemories(NewsScript);




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