数学建模社区-数学中国

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

作者: 韩冰    时间: 2005-1-26 12:32
标题: 在 C++Builder 中,如何自定义属性 [properties] ?
[摘自 水木清华站]$ ?* `$ }$ @' Z0 L

# E1 d' X8 g2 G        2 o, g( F; s: ?3 s- \
对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序: ! {9 A2 \- Z2 q$ l( y
BLOB字段的读取:
0 j, [9 I  ^0 c2 c, A8 g TBlobSTream* TemplateStream; / F  l" l0 h. x+ h' V* ~8 @
char* TempPlatePtr;              ' {% W4 G& H  `% v( K

# l+ N, l/ h! J TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 0 O2 J$ e! n1 X1 v- r7 I8 B
                        ("SearchTem"),bmReadWrite);
2 F; r0 u1 n1 l0 T TemplatePtr= new char[TemplateStream->Size]; 1 q! T3 x: C7 b% E( j1 E
TemplateStream->Read(TemplatePtr, TemplateStream->Size); ! i2 F) @4 x. X% t

) M) u" y5 K) \" s7 NBLOB字段的写入: / Q3 @- Q! u4 R4 x
TBlobSTream* TemplateStream;
  A8 w' K3 j6 S char* TempPlatePtr;              ; w# [- r6 z/ P: P+ s2 {( j

+ g$ F& I" W# _ TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
8 C$ t0 F/ [' ^- D  @7 \' @& X                        ("SearchTem"),bmReadWrite);
# e, N$ ]7 d- B' x TemplatePtr= new char[TemplateStream->Size]; + P$ w* v3 F( b9 n) d/ H
TemplateStream->Write(TemplatePtr, TemplateStream->Size); + D) U6 E8 M& h, @1 @0 J$ ]) P. Z
) m$ Q2 G7 l. J. G9 j. T( l
________________________________________________________________
+ F  J; J3 ~7 i补充: 4 q" S* Q4 b, ^) O. P# c! m* B
获得字段的大小用函数datalength   L9 C3 K2 W" P3 s. w  Z
- Z' E/ m9 p7 c  Q) x
SQL Server端要作一点设置:
/ K" e5 K7 T+ h, _5 ~9 w8 j% XBy default, WRITETEXT is a nonlogged operation. This means that  . ~0 K  y6 s$ k# Z! K+ f2 t8 ~
text or image data is not logged when it is written into the database.  
8 A) j) X  C8 mTo use WRITETEXT in its default, nonlogged state,  
6 |- U: S( M* L& u: ^//注意!!
; T7 J) B7 D3 pthe system administrator must use the sp_dboption system stored  8 }3 S. X% m% Y) M8 ~
procedure to set select into/bulkcopy,  
7 T& F7 c' Z% Q$ H6 g" V' y//
' T  s' k0 E# ]# Wwhich allows nonlogged data to be inserted. . A0 y# X  ]& `) A
  u3 r7 F; M& ~0 `3 i
做了试验,直接写SQL语句好象不行. 1 s) t, R& X* }  [% g* n
____________________________________________________________________
3 P1 d. N3 s, c* j0 X        一些注意事项和一个例子
! U' q9 \! _% l) {* C/ G; @在写入时: ' R6 M' R0 S- s! F
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
, Y' P  H! B2 m, S(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
7 [3 y" e# L. L( q" a1 A使得TTable(TQuery)是可写的. ; I6 \. G' R8 v% z: W/ b# U. k
9 l! y8 ?% i- q7 V$ H+ i
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, 3 q8 [' m) l8 X3 {
script为一个BLOB字段: - E2 }  x/ r# m/ y
   TBlobStream *pScriptStream; 6 M- {/ L7 F% {% N% X
  //插入一条记录
9 N) ~) [/ U$ q% @' [        strSQL1="insert  into  content(file_id,script,key_image) values('";
# @& G( i; f- ^3 R. L1 E3 M$ y        strSQL1=strSQL1+m_szFileID+"',null,null)"; $ h- U' R5 I; a  w: k2 a
        dmStoryEditor->qryExec->SQL->Clear(); ; X( w+ G7 Q" R+ p% ?% c! n- s: c' Q
        dmStoryEditor->qryExec->SQL->Add(strSQL1);
. w7 _7 K' s! ?- J6 P$ P4 U/ h: P        dmStoryEditor->qryExec->ExecSQL();
' U$ C# \2 B) s; Y  l; l        dmStoryEditor->qryExec->Close();
4 m0 y+ g% K8 y/ p; F# _  //整理要写入的Blob数据   & j" R0 X# r0 S* V1 b" p  j
        LockMemories(NewsScript);
  l& v; J4 v% o        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
7 m( ?1 k& ?' R6 n4 X+ ]8 |        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
& T1 a: G" m7 z8 L9 Q+ m7 j9 c0 |6 ?3 K7 A        if(NewsScript.m_pScript!=NULL) 6 i6 {4 Z. }& j* F  \
        {
) _( V8 {2 @% }- E' l7 G/ i. P, A! U   //再将刚插入的记录读出来,使该Query与该条记录关联 3 ~3 O5 G/ p* S8 w9 [( {7 w
        strSQL1="select  file_id,script  from  content  where  file_id='"+
' U. r$ J* M; d2 \  j8 d  K                m_szFileID+"'"; 1 X+ a/ j- M9 N
   //允许该Query写 4 d4 J  x  P4 ]3 c' T  E
            dmStoryEditor->qryExec->RequestLive=true; * w/ J- q( n; a2 k8 I
            dmStoryEditor->qryExec->SQL->Clear();
, }8 a; m3 x, d. _- \            dmStoryEditor->qryExec->SQL->Add(strSQL1);
2 j& Y3 R1 B' v9 Q& {7 l  `            dmStoryEditor->qryExec->Open();
2 h) F2 t  q6 y! h            dmStoryEditor->qryExec->First(); $ [6 c) L( q( d
   //将该Query置为可写
) B7 ]* i  j" a0 b1 J            dmStoryEditor->qryExec->Edit(); ; x# V9 O( ^6 A$ t& ]
            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor-> 1 B' T/ L# A, p
                                qryExec->FieldByName("script"),bmReadWrite); # k) h, [# t/ q4 N% W
            pScriptStream->Write(NewsScript.m_pScript,    V! V5 M* T8 ~
                                        NewsScript.m_lScriptRealSize);
7 d' C, b# [  L  ?$ z, [            dmStoryEditor->qryExec-&gtost();
" I: [' {" O: J  S( q            dmStoryEditor->qryExec->RequestLive=false; * @1 K1 O3 c, N
            delete pScriptStream; - H. h, `) d3 r) e  E3 d
       }
7 n# S1 o; I1 z& [, F+ \$ B       GlobalUnlock(NewsScript.m_hScript); ' @/ K4 O+ f3 C8 C
       UnLockMemories(NewsScript);




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