QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:32 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
[摘自 水木清华站]
1 Z9 o: h5 m5 w% i: F6 H" _0 T
" t3 a8 c, s6 E        
7 ?& |" U( t' E( t5 P% g, l对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
- r$ P' F: `: t8 ]% vBLOB字段的读取: 8 {+ h3 X! O+ a: m. t+ a* [$ S
TBlobSTream* TemplateStream;
/ J4 C! ]) ^3 J$ s char* TempPlatePtr;              
; C3 ^9 n+ b/ }* R  {: Y   j. i$ D2 u8 [  K  c: q$ d0 i
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName 2 y6 y( S. ^1 N' `* _; F$ Y
                        ("SearchTem"),bmReadWrite);
# N' h" I. z6 D$ K' E+ J3 t) x TemplatePtr= new char[TemplateStream->Size]; 1 F. n! x* T! X/ ^/ @
TemplateStream->Read(TemplatePtr, TemplateStream->Size); ! b6 ^( Z3 Z, r: y( Z

& \. S0 G/ u: h0 n3 H! L  aBLOB字段的写入:
1 m4 Y4 s6 Q: S TBlobSTream* TemplateStream; % t. @* C# t0 @; h
char* TempPlatePtr;              7 g- s7 X! a+ K. K' w6 \6 Q- q

7 e" s3 @  }/ J TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
7 @  [. R# h- ?* |0 L                        ("SearchTem"),bmReadWrite); 4 _" v) z1 F5 ~
TemplatePtr= new char[TemplateStream->Size];
$ q6 K8 I7 g8 X1 o TemplateStream->Write(TemplatePtr, TemplateStream->Size);
$ Z8 o, n) m5 B # A8 b. h, j$ e+ L9 g: E
________________________________________________________________
" t! R8 d- B" W) _/ @0 B8 i补充: $ W+ M' {" s! d, y2 v& r* C1 Z
获得字段的大小用函数datalength
2 K7 \# d7 Q0 F9 o 3 ~& M; V' ?% J* f" z7 A
SQL Server端要作一点设置:
, g4 _* i3 f! O* G( S3 XBy default, WRITETEXT is a nonlogged operation. This means that  
! ^5 ?0 {6 Z$ j! e/ |! W# H) {text or image data is not logged when it is written into the database.  1 K. X. {/ q4 w* P
To use WRITETEXT in its default, nonlogged state,  
) {1 q8 j9 l" A/ A//注意!! ) `6 K: }8 E4 C6 B+ O7 M/ o- s$ T
the system administrator must use the sp_dboption system stored  
9 ~  n: H9 h5 q. `" xprocedure to set select into/bulkcopy,  : Y& ?" G# B4 z- [
//
/ a( P' i6 ]4 {* a. [" l% w; lwhich allows nonlogged data to be inserted.
2 \0 w7 W. g- A6 b$ h 0 X8 Y4 c4 L$ Y, y9 E
做了试验,直接写SQL语句好象不行. - p# w4 Z5 n% O5 e
____________________________________________________________________
% V" m( e( ]7 E6 u( ~1 ]% z) f        一些注意事项和一个例子 0 H8 b" |# w# W: X
在写入时: 3 |7 H' P5 P. s: V2 C! H% L- U
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
% ~, f+ m8 l8 U- A3 u. W0 X(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; , e4 P( X5 t" ^+ M) l
使得TTable(TQuery)是可写的.
: f/ _# [8 I* P$ c  `6 l- U
$ v! o* a  Y3 |+ S8 o下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
& x2 Q7 b+ b6 m5 |7 `# ~script为一个BLOB字段:
% E; \) p& A" [, ~6 D/ n; X   TBlobStream *pScriptStream;
6 ?7 X6 L/ m, z8 H# n3 I+ q  //插入一条记录 : `6 N# W! O3 H$ Q
        strSQL1="insert  into  content(file_id,script,key_image) values('";
2 l+ W+ b2 z  p5 X. F3 [        strSQL1=strSQL1+m_szFileID+"',null,null)";
" c4 k. \2 n: M7 `* a        dmStoryEditor->qryExec->SQL->Clear();
( \# M5 ]& k5 G        dmStoryEditor->qryExec->SQL->Add(strSQL1); ' ?# E$ b( O* M; F( y6 o
        dmStoryEditor->qryExec->ExecSQL(); / a) H4 L: b" e" u
        dmStoryEditor->qryExec->Close(); . ]$ h) |# U; A6 Z3 x& O* W! G
  //整理要写入的Blob数据   # ?8 ~6 e9 v$ [1 ]2 J9 _
        LockMemories(NewsScript); ' ~9 W# S: }" J0 `( W
        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); 6 ~# b3 H: I6 y* y" e, ^6 b
        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
3 u. N6 R4 ?( S/ h: M8 p5 |        if(NewsScript.m_pScript!=NULL) * ]( k: O) B7 |: q3 ?0 t
        { % h/ C; c; q# j3 g- x: _" y; D8 [
   //再将刚插入的记录读出来,使该Query与该条记录关联
' U  @* M! o, u. j, {" R3 u5 N        strSQL1="select  file_id,script  from  content  where  file_id='"+ " f. V+ o$ }7 q1 n5 q4 I
                m_szFileID+"'";
4 @/ l6 x" q# v" t& r1 F   //允许该Query写 ( w, g2 [: {: q9 j: Q
            dmStoryEditor->qryExec->RequestLive=true;
3 f* |3 V$ V/ |, \' d            dmStoryEditor->qryExec->SQL->Clear();
  {; |. X. h- f            dmStoryEditor->qryExec->SQL->Add(strSQL1);
1 T. E! l+ \: A; y1 _            dmStoryEditor->qryExec->Open(); 5 P4 w6 q' ~0 S
            dmStoryEditor->qryExec->First();
& i  g! |8 V4 W* T6 l   //将该Query置为可写 + g' H, U7 g5 u# M" v
            dmStoryEditor->qryExec->Edit();
& q4 T* g* E7 n. i4 C/ a            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor-> & g! ~5 G$ k" V5 T! ~# s" l
                                qryExec->FieldByName("script"),bmReadWrite); 0 `2 i! n. h+ @, W' R  ?6 {
            pScriptStream->Write(NewsScript.m_pScript,  3 X/ [& c# |* p" }/ v
                                        NewsScript.m_lScriptRealSize); 9 u! ~# |& c' R# _
            dmStoryEditor->qryExec-&gtost(); % X1 j# w6 o' T0 l5 P" w# I
            dmStoryEditor->qryExec->RequestLive=false;
. u/ d) i  B6 ^            delete pScriptStream;
4 }# P) u7 A, g& O' v( q3 E! u* E9 F       } : ~) `( p! L7 P2 t
       GlobalUnlock(NewsScript.m_hScript);
( v7 n  }, x; j       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, 2026-4-20 06:51 , Processed in 0.364132 second(s), 52 queries .

回顶部