数学建模社区-数学中国

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

作者: 韩冰    时间: 2005-1-26 12:32
标题: 在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]( o. k  v& A& T9 o3 m
0 A2 l1 C' j. @/ o. |' h: J- |# }
        & l* i& j9 S, [  `
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
2 `  _; h( p7 v3 p& u5 @BLOB字段的读取:
2 e( H9 w& a" U, G0 ` TBlobSTream* TemplateStream;
+ I% N7 d; _/ b2 W2 y6 a, u) } char* TempPlatePtr;              + }2 Y/ I* W4 I' \& m  l' Y3 @
1 R7 x  t$ y" K& e- n9 V
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 7 @- Q$ s# R6 U( e/ Z. l* A
                        ("SearchTem"),bmReadWrite); * B$ k- x: H: S  j% o/ L& a- N+ |
TemplatePtr= new char[TemplateStream->Size];
6 z8 Q/ H8 f  B/ P9 G" Q9 H TemplateStream->Read(TemplatePtr, TemplateStream->Size);
' r; e8 x' L3 U8 i- R, O
, u1 N4 J8 P# ?& SBLOB字段的写入: 4 y& z9 k7 J8 o; W: }
TBlobSTream* TemplateStream;
! l. K3 r3 D. {9 T6 T: Q& i. T char* TempPlatePtr;              5 c9 y3 m/ l8 X/ [4 m
: @3 B# q3 i, I, y/ }5 |
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
* c9 J' \1 G% i                        ("SearchTem"),bmReadWrite); * o+ R1 }$ w* N* o/ N/ O
TemplatePtr= new char[TemplateStream->Size];
4 Q6 ]: |: f, m. _, r TemplateStream->Write(TemplatePtr, TemplateStream->Size); & Q3 Q2 x% t2 l
. T9 c. K+ q$ C5 l1 G* c3 N
________________________________________________________________
; p) |  Q% v  j9 F% C6 S  S' [补充: 6 q% u# A% Y2 l2 ~
获得字段的大小用函数datalength 8 a$ O( d8 L# q& k" y

/ M1 j0 D( h2 n' z' hSQL Server端要作一点设置: + X  h: p- \. q  T) @
By default, WRITETEXT is a nonlogged operation. This means that  
7 j( S; Y6 K/ x3 `6 n7 ^9 V; P4 I, Dtext or image data is not logged when it is written into the database.  
1 m0 D: C' ]! |) r# G0 JTo use WRITETEXT in its default, nonlogged state,  6 n7 ^6 v1 X( F0 C: V0 o
//注意!! - ^0 |& m; E, F3 {% H" Y8 ]
the system administrator must use the sp_dboption system stored  + Z, f# G5 X  Y  K5 k) {
procedure to set select into/bulkcopy,  ! e0 I  V" C( j  ^" g4 _
// # K* c: L  u7 W
which allows nonlogged data to be inserted.   m# `4 R6 z* V! E# c
4 j3 Z* {  v1 Q7 M
做了试验,直接写SQL语句好象不行.
. T  U% y+ G- `  F; K- `____________________________________________________________________
6 `; {+ r! B, L" r3 l        一些注意事项和一个例子
5 R+ A/ S  o* n( n# z  i! s! g7 t在写入时: % P  D# t, i. n* q
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; & M* \7 Q7 X6 G# t4 C4 n
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
1 Y; [$ d$ o" X" l7 J; R使得TTable(TQuery)是可写的. . f: O5 [$ N9 }9 ^* j) }" B8 y

* }, ]" K) k$ H, \下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 0 }7 t# |' C$ K* O0 G, {
script为一个BLOB字段:
( N" Y$ A6 W* N# n( N( u7 n  v   TBlobStream *pScriptStream;
' \; v7 \- q7 |% O% ?5 y5 @4 n, I  //插入一条记录
. i* s/ {% w/ j- D5 f; J: A# M        strSQL1="insert  into  content(file_id,script,key_image) values('"; % T! V% m# L: X+ o- c! d7 V6 J
        strSQL1=strSQL1+m_szFileID+"',null,null)"; 9 G% ~: I8 ]5 u
        dmStoryEditor->qryExec->SQL->Clear();
. x- y- |* ]& B# E        dmStoryEditor->qryExec->SQL->Add(strSQL1);
1 E0 E' l. b' k5 z        dmStoryEditor->qryExec->ExecSQL(); $ x6 @8 u" ]6 G0 Q, }. _2 K
        dmStoryEditor->qryExec->Close(); " L7 o2 f( g/ x, Q6 @: y
  //整理要写入的Blob数据   
! A+ b8 g7 F; j" v9 X        LockMemories(NewsScript); ; c: ^) t8 O9 i3 e% J
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
5 E% q& v- q! m        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
$ S$ ~7 {* E) F        if(NewsScript.m_pScript!=NULL)   g" W, X5 C4 H  m+ Y
        {
( U* Y% a% V7 V( ?   //再将刚插入的记录读出来,使该Query与该条记录关联 1 F9 k9 q( f* j& y( t
        strSQL1="select  file_id,script  from  content  where  file_id='"+
0 c6 ?2 Q& U3 w9 e                m_szFileID+"'";
+ w4 g* u& |: E! C   //允许该Query写 8 _5 c; d* w9 x  {$ ^# I
            dmStoryEditor->qryExec->RequestLive=true; ' }3 ]2 ]: w- l2 Q) q& v6 q
            dmStoryEditor->qryExec->SQL->Clear();
" @% t* ]5 z) w            dmStoryEditor->qryExec->SQL->Add(strSQL1);
' n  |+ d* J9 Q' Q. V% Y* @3 Y: N            dmStoryEditor->qryExec->Open(); ' i9 R) y3 w3 |( c+ Q( o
            dmStoryEditor->qryExec->First(); - A+ w# v  N0 ?1 E8 |& I
   //将该Query置为可写
- @7 t8 j, H/ V9 i. C& Y% V& U            dmStoryEditor->qryExec->Edit();
1 x* V; u- x1 o2 j- C            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor->
7 v' d  X& K- m/ u. q' ?# `                                qryExec->FieldByName("script"),bmReadWrite); : E' u  [+ N7 A* w) y: k/ i
            pScriptStream->Write(NewsScript.m_pScript,  6 y2 p7 u# E% S
                                        NewsScript.m_lScriptRealSize);
1 Y2 o" Y5 h( A8 s5 X3 Q            dmStoryEditor->qryExec-&gtost(); 9 C# o; Y$ x" G- I
            dmStoryEditor->qryExec->RequestLive=false;
7 |0 w, W8 j% w            delete pScriptStream; 6 M% ^) U; F: s+ N2 s* X* d' e% ]
       }
: b! M9 F; C; {# m       GlobalUnlock(NewsScript.m_hScript);
6 P/ H$ A* R, L+ H) Y/ x       UnLockMemories(NewsScript);




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