QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3402|回复: 0
打印 上一主题 下一主题

在 C++Builder 中,如何自定义属性 [properties] ?

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:32 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
[摘自 水木清华站]
3 \. B, g. a- E2 Z$ S1 L7 E( S, n2 Q
* J9 ]- v# \+ W# a$ U        
1 k+ {7 f* p* k7 V; p( t6 m对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
5 ~0 q& I6 t5 g5 e2 L( v% P% Q+ ?9 MBLOB字段的读取:
  i# ?: i* B5 ^. m0 o TBlobSTream* TemplateStream;
1 [. O7 F3 g- k' U3 S% D" N char* TempPlatePtr;                W' w1 E& _2 Z) J7 u8 ^& y
, F& c! T7 U' G9 b( z' _3 U  c- M9 \
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName ' U6 k9 l5 t9 x3 m/ b- Y9 y
                        ("SearchTem"),bmReadWrite); . M: v8 a9 w- o0 Z( `! A
TemplatePtr= new char[TemplateStream->Size];
4 d( t% `- g: j' c) Z TemplateStream->Read(TemplatePtr, TemplateStream->Size);
0 L5 t4 U  E; }: G1 q. m# C ; j. ]7 N' [( f! n  S7 ~7 W" d
BLOB字段的写入:
  y8 o* g5 {9 F+ Y& \1 S TBlobSTream* TemplateStream; 8 h: l9 L# ]% c3 P- ~# L; W8 l
char* TempPlatePtr;              ( _2 O9 @8 O+ T! k

+ @& m3 n$ b0 t2 \0 E4 U TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 1 p: C. T( K. W/ P8 U
                        ("SearchTem"),bmReadWrite);
+ s4 H4 o) h- N  k+ W- n5 }# z& \ TemplatePtr= new char[TemplateStream->Size]; " P, _! t5 Z6 u/ D
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
- s; }6 K$ l) m' k$ S, G + i# e& a; ]- ^7 z% p
________________________________________________________________ / l( B$ f9 t8 ?; t2 A/ d
补充: 3 P/ Q' V- G! i( o- C4 c
获得字段的大小用函数datalength , ~* n! u% z1 R6 c$ j8 I
7 H2 @+ Y- i! z: e* O8 p& g
SQL Server端要作一点设置:
* N! x0 V1 E% ZBy default, WRITETEXT is a nonlogged operation. This means that  
; t0 x3 i6 C- r* O. P" ?2 {7 U& ztext or image data is not logged when it is written into the database.  6 H! W& O( O/ p7 Q9 ~5 e! z$ }
To use WRITETEXT in its default, nonlogged state,  5 D5 B* j- n( }, U2 _' w
//注意!! 8 P* y5 |) {2 ^$ Q& v0 J* p7 G
the system administrator must use the sp_dboption system stored  - z( g) a$ W: i; o9 ]0 {' ?" J$ @. S
procedure to set select into/bulkcopy,  
7 h' V" X7 B7 d& e) A5 q// ( m, F) F$ n2 \& t, g* m, C
which allows nonlogged data to be inserted.
: Z" b) A( r4 R4 k) Q
$ w' H7 a5 \5 W) u" p8 o. h/ Z6 k做了试验,直接写SQL语句好象不行. 6 }; A$ f- _/ P2 u
____________________________________________________________________
3 Y* H1 \; F* U7 T        一些注意事项和一个例子 " `" o5 K$ Q9 ?
在写入时: : ~9 m6 Y7 B& K3 _
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数; 7 c  C0 g! _4 }" W: D
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; . @# T7 d- O1 ~9 `& H) M# b
使得TTable(TQuery)是可写的. 6 h( C; {: w2 P7 x

) f5 t/ c0 I) z( n+ b下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子, ' U5 |9 m& C" ?) _7 e
script为一个BLOB字段: 7 ?+ l' F% ~, ?0 k" J5 @  _
   TBlobStream *pScriptStream;
" w2 n5 |+ G' q9 t; L9 s$ K. j  //插入一条记录
2 _' c0 B' v! N' G. J        strSQL1="insert  into  content(file_id,script,key_image) values('";
, D& R( _, F; O* o: }4 o+ B        strSQL1=strSQL1+m_szFileID+"',null,null)"; % d6 l  q3 D# |$ P  O
        dmStoryEditor->qryExec->SQL->Clear();
8 R! T- z* ^- q7 `0 p6 R        dmStoryEditor->qryExec->SQL->Add(strSQL1);
: T# f0 M' U& Y. v        dmStoryEditor->qryExec->ExecSQL(); , @8 H1 J, z3 U! z0 S
        dmStoryEditor->qryExec->Close(); 2 s; L& Y4 q4 d. }, J! n' e
  //整理要写入的Blob数据   
3 E5 C: q& v8 D" h+ b! }- Y        LockMemories(NewsScript); 1 g4 l2 D( u! a
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);
8 R% `8 T: z/ h        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript); + s- ]* G( T0 x# Y9 k9 n: a
        if(NewsScript.m_pScript!=NULL) & y0 A4 }3 c  A7 D2 O
        {
: x3 _' s  ^% v$ ?* O1 S: @   //再将刚插入的记录读出来,使该Query与该条记录关联 " l9 R1 U2 P  F" ?
        strSQL1="select  file_id,script  from  content  where  file_id='"+   Z$ z3 ^' S, p" N, i
                m_szFileID+"'";
! J# u5 C  Z4 i( i# Z7 Q' V   //允许该Query写 3 ~. @: r  t0 i9 O7 k
            dmStoryEditor->qryExec->RequestLive=true; # }8 R$ p6 v8 E& v2 Z" I" I
            dmStoryEditor->qryExec->SQL->Clear(); % G: C( L* Z) F! c, S
            dmStoryEditor->qryExec->SQL->Add(strSQL1);
. u$ e0 _" ?5 G" W            dmStoryEditor->qryExec->Open(); ' g" u6 g0 s/ l8 P4 @: D
            dmStoryEditor->qryExec->First(); 7 W; J. k; a- J) }* {% y9 ~, m
   //将该Query置为可写
5 Y1 l. z' a0 J7 D3 o            dmStoryEditor->qryExec->Edit();
0 x7 V2 P6 l9 ]            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor->
/ T" _2 J9 k  N. b" y: c6 Z  ?; ]                                qryExec->FieldByName("script"),bmReadWrite); 5 e( L/ I( K6 @
            pScriptStream->Write(NewsScript.m_pScript,  
: `, p4 K0 D8 p7 ~% R- S( l5 y5 A- h                                        NewsScript.m_lScriptRealSize);
) `( [/ \. [2 |. ]5 [            dmStoryEditor->qryExec-&gtost(); $ v5 U. P1 _% p% C6 }+ V8 A1 `
            dmStoryEditor->qryExec->RequestLive=false;
) {  E) }& d# M            delete pScriptStream; ! k& Z- _4 z% n1 ]. N
       }
& ^) l( _( J  x8 E+ K9 ?; E  Y       GlobalUnlock(NewsScript.m_hScript); * F- Z6 g( }4 N3 {% S6 R0 D
       UnLockMemories(NewsScript);
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-2 08:27 , Processed in 0.384931 second(s), 51 queries .

回顶部