QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:32 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
[摘自 水木清华站]
, |7 i' \& }( S0 f 7 v. Q' o# \6 D2 w: c6 ~
        
+ u5 U9 `0 m9 V6 W' v对于SQL中的TEXT、IMAGE、MEMO字段的存取,可以采用下列程序:
8 I2 n% f4 O! k) G/ s& ?BLOB字段的读取: $ Y* D8 ^+ ]/ e% A. F* v" M+ b
TBlobSTream* TemplateStream; 9 v" b1 Q2 u2 ~) J8 G4 `
char* TempPlatePtr;              
' X& u- Q: R: W% z 1 O! Q; ]4 T7 b* d/ ~
TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
* X0 n% u1 B+ {. y6 c                        ("SearchTem"),bmReadWrite);
+ Q. y& b# a, `4 q4 N+ E9 N TemplatePtr= new char[TemplateStream->Size]; 0 @' l- F0 ~; G, V( {5 j+ T
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
: J; R2 A# ^, k8 \5 R2 w 2 {% o4 a# ~, ^8 c8 @& l
BLOB字段的写入:
4 R$ z: E. u9 T& P9 j. Q+ c TBlobSTream* TemplateStream;
' ^) h& z* W) I) {8 w char* TempPlatePtr;              ( X, Q; _# y  f- T6 h

  l8 A9 W8 o7 ?  W# r. ` TemplateStream=new   TBlobStream((TBlobField*)WebQuery->FieldByName
' G, M7 E8 Z2 Q4 f; _5 J: P                        ("SearchTem"),bmReadWrite); , E. x- q$ Z4 C6 N9 U% L6 F6 }
TemplatePtr= new char[TemplateStream->Size]; ; l5 C$ U9 \6 ~1 u1 h6 }2 o/ J# V
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
( Q$ w& q6 X% w( d3 G, }: T' v% i( S# L
, o$ e' I% {+ y1 V0 |* r________________________________________________________________
4 h) k3 s' X( }  z' G补充: " ]' D% d( c2 m5 f8 l% ]
获得字段的大小用函数datalength $ ?. f6 \) f  `& X5 b; T8 x

5 c7 ]5 Z, w/ A2 {0 W" H" |SQL Server端要作一点设置: + X7 y8 X4 C. l1 l
By default, WRITETEXT is a nonlogged operation. This means that  
$ c2 C( q9 r8 B* ztext or image data is not logged when it is written into the database.  
- R2 L! R5 e  M( n, y( dTo use WRITETEXT in its default, nonlogged state,  7 Q" j! R9 i' l% T* {
//注意!! & o9 O8 F  B; B8 D; [# @
the system administrator must use the sp_dboption system stored  / q4 W0 y: V- C' r  @
procedure to set select into/bulkcopy,  8 m% r  u$ Z# [2 {, J4 f: e
//
5 v3 E+ w- N" `* N1 z+ k/ a& Q: G6 Jwhich allows nonlogged data to be inserted. + r% Q  @- t0 S7 F

4 T1 |- ?3 m1 C. ^4 r. k; V: ]做了试验,直接写SQL语句好象不行. ' ?8 n0 O5 T$ E, _1 u! M2 R: F; i6 I
____________________________________________________________________
7 i  ?& M0 E: m2 ^% A) s! J9 H        一些注意事项和一个例子
: [+ O* [! Z: m1 \! `! Y在写入时: 4 w( Y, a, v7 s9 t8 A/ [8 }
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
, g; p8 [1 [  g(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数; $ c" _* V% `' K
使得TTable(TQuery)是可写的.
6 b9 {. J. J# ?3 O( f ! s: _" R. U  g% ~8 X, f5 V
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
, a: G' o- q& G) K1 Q' Wscript为一个BLOB字段:
4 M* Y$ U7 Z& r) _# M7 c9 L; c   TBlobStream *pScriptStream; 8 p1 Z+ U! I; y
  //插入一条记录   B2 }* j5 W; @3 @" N
        strSQL1="insert  into  content(file_id,script,key_image) values('";
* i: `. ^# Z0 e" Q& L2 a2 G+ \        strSQL1=strSQL1+m_szFileID+"',null,null)"; & J7 z' h3 o6 {
        dmStoryEditor->qryExec->SQL->Clear(); 7 f) O# Q! Z" y& N
        dmStoryEditor->qryExec->SQL->Add(strSQL1);
, o7 g5 E& M! p8 j) G( m        dmStoryEditor->qryExec->ExecSQL();
+ g# A! z( q" F2 d6 u6 c        dmStoryEditor->qryExec->Close();
9 @/ I7 Q: |- n( T- d  //整理要写入的Blob数据   6 `/ z0 s  u6 s+ P' u& _
        LockMemories(NewsScript);
$ Q  W# t" p' P0 Y5 n6 D. y        NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum); : E1 g( U8 l; @
        NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
+ U6 v) e! i; S5 W' e+ T        if(NewsScript.m_pScript!=NULL)
2 {3 g2 c5 C  e/ y7 t/ G7 {; c: Z        {
5 @: x5 m. t$ ]& j   //再将刚插入的记录读出来,使该Query与该条记录关联 8 J5 z5 q! i+ }1 u+ N$ q
        strSQL1="select  file_id,script  from  content  where  file_id='"+ ( i3 Y0 Q, i2 ]4 r; \
                m_szFileID+"'"; 5 U* y8 ]8 M- P* w7 A# ]% P  c
   //允许该Query写
2 \( L, W7 |" y0 U5 e# o            dmStoryEditor->qryExec->RequestLive=true;
1 s. s& z" e5 W% m. V( ^            dmStoryEditor->qryExec->SQL->Clear(); 2 \4 ?  z( k6 [
            dmStoryEditor->qryExec->SQL->Add(strSQL1); 8 o/ W% o. [3 S' v! @
            dmStoryEditor->qryExec->Open();
" U9 M# G8 l, }: x( q4 Z7 c            dmStoryEditor->qryExec->First();
2 P  |+ ]; v' Q; p   //将该Query置为可写 * O( r) W& c% {8 s% U1 I
            dmStoryEditor->qryExec->Edit();
( J/ R- y: g8 N9 @( C+ ?' h/ C            pScriptStream=new   TBlobStream((TBlobField*)dmStoryEditor->
; |2 X5 G' A+ c% k. }                                qryExec->FieldByName("script"),bmReadWrite); # T7 Q: d/ J- o. [, w) z0 q
            pScriptStream->Write(NewsScript.m_pScript,  + r) t1 v8 J6 n. A. Y8 u6 Q
                                        NewsScript.m_lScriptRealSize);
. P5 W; E( M+ \! q) L            dmStoryEditor->qryExec-&gtost(); ( u, i# a" X2 V' }0 g; T- p' {
            dmStoryEditor->qryExec->RequestLive=false; 0 a' |3 P/ [6 h/ E; D6 K" {
            delete pScriptStream;
& x$ V% I8 z0 @7 y" R2 m5 M       } + F/ \( t0 A- C  v
       GlobalUnlock(NewsScript.m_hScript);
! n2 z% [$ y3 H8 i& D8 d* A       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-6-12 12:49 , Processed in 0.409175 second(s), 57 queries .

回顶部