QQ登录

只需要一步,快速开始

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

如何给Table减肥

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 12:36 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

用BCB进行多媒体数据库开发时常会发现这样一个现象,当你把一条记录从表中删除时,表的大小并没有相应减小。这样在进行多次插入删除之后,表文件就会越来越庞大。之所以会有这种现象,是因为TTable控件的 / ]- \% B! J8 [" z% a Delete * M/ j, \7 w; x3 r2 O! D4 cMethod并不真正从表中删除记录,而只是在记录前加上一个删除标志。在DBase和Foxpro中有Pack语句对表进行压缩,但在TTable类中却没有相应的函数。其实在BDE的API函数中已经提供了DbiPackTable来对DBase或Foxpro表进行压缩,但是这个函数对Paradox的表不起作用。要想给Paradox ) v9 q) m6 C. o$ c表减肥得用DbiDoRestructure函数来完成,以下例程完成Pack Paradox表的功能。 6 p! q+ p* }/ d2 S4 J8 q * m# Q- c& Y. R9 |& x //This function Pack the Paradox table. write by zodiac : w! E0 Y1 y. r, ?void __fastcall TForm1:ackParadoxTable(hDBIDb hDB, AnsiString TblName) - B$ T% b& M, P{ 3 \' g3 N) X8 x0 V5 U2 I" e //Paradox table use a quite different way to be packed than / }! `( d7 Q( W* u8 J //DBase or Foxpro table, it use the DBiDoRestructure not the 6 o/ {! B) B8 |# R // DBiPackTable 7 X% J5 k% r7 `0 }; g* m DBIResult rslt; : a7 I) n( h% z CRTblDesc TblDesc; ! f+ O% Y, ?) ]: h. ? //filled the structure CRTbiDesc with 0 0 f9 G3 r* }, H$ \+ P# L memset((void *)&TblDesc,0,sizeof(CRTblDesc)); 3 A7 z! M: a( c! j+ @# t //copy the table name and type to the structure ! i8 H$ u- R8 \" w0 [ lstrcpy(TblDesc.szTblName,TblName.c_str()); " u; \) b, X# w {2 F# W lstrcpy(TblDesc.szTblType,szPARADOX); % e+ { ?9 b/ E; y //set bPack to true to specify Pack Function * w3 \, \7 `9 | Z. y TblDesc.bPack=true; " y) a, u4 f: r: [) Q //Pack the table : ^, O5 v2 |4 L) @- x rslt=DbiDoRestructure(hDB,1,&TblDesc,NULL,NULL,NULL,false); * }. y8 r. j ?9 L: h! {' S if(rslt!=DBIERR_NONE) 3 _* Y6 w9 N" g) }4 i Application->MessageBox("不能压缩表", t4 w- k8 r- j& g& G# O "压缩数据表出错",MB_ICONERROR); 3 D A6 U& }$ n8 _+ B} 6 i0 Q+ d2 S/ H: I; D" e 注意,在Restructure之前,表必须处于关闭状态。以下例程调用PackParadoxTable. . r! G8 ?2 ]3 f 6 }% `4 {9 i4 a- m, S void __fastcall TForm1:ackTable(AnsiString table_name) + ?* m2 |; ^: N, G{ - s+ @4 C4 H7 b; i9 w: g7 k //Pack the table 0 m& I. `4 d. Y8 I4 d" v TTable *temp_table=new TTable(Form1); 2 o- I' j1 _0 H3 F/ W! A3 ~# ^ temp_table->DatabaseName="YourDatabaseAlias"; 4 c. v) M: k( k/ Y( ~1 W9 n temp_table->TableName=table_name; 6 v: a/ \1 X& R7 { temp_table->Exclusive=true; 0 _6 \: R8 o1 I5 ^/ [ temp_table->Open(); : M& \. [" Q. H3 r //get the Database Handle , P/ Z6 j( Q: _/ i4 I& ~ hDBIDb hDB=temp_table->DBHandle; " U% v+ w/ ^' v# k" i temp_table->Close(); ; U. @. C8 y P; @( t, G9 b% L r/ i+ F* a4 w* _' _ V7 v PackParadoxTable(hDB,table_name); : j7 E0 X/ e- w" r g! e2 n 1 p4 C9 D( S6 ?: }9 k |7 [3 Y temp_table->Close(); 7 Y4 P3 v' I8 F4 g0 \/ r; ? temp_table->Free(); : J2 X* L+ R. |* b3 G h. w- x} - a4 Q# ]% `) o 5 _" V: G9 J2 ?* j8 _ 5 r6 w: R& [0 [0 d: V对Foxpro和DBase的Pack参见BDE API Help的DbiPackTable函数说明。

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-13 06:10 , Processed in 0.395044 second(s), 53 queries .

回顶部