QQ登录

只需要一步,快速开始

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

如何给Table减肥

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

用BCB进行多媒体数据库开发时常会发现这样一个现象,当你把一条记录从表中删除时,表的大小并没有相应减小。这样在进行多次插入删除之后,表文件就会越来越庞大。之所以会有这种现象,是因为TTable控件的 & ]: d0 Q; m5 w8 U' ?Delete * ?; Y' {. J0 _2 L! LMethod并不真正从表中删除记录,而只是在记录前加上一个删除标志。在DBase和Foxpro中有Pack语句对表进行压缩,但在TTable类中却没有相应的函数。其实在BDE的API函数中已经提供了DbiPackTable来对DBase或Foxpro表进行压缩,但是这个函数对Paradox的表不起作用。要想给Paradox * ~, l9 _9 G `! q表减肥得用DbiDoRestructure函数来完成,以下例程完成Pack Paradox表的功能。 0 _( {1 X8 }2 F$ ]) h 8 ~, J& r6 z0 a //This function Pack the Paradox table. write by zodiac 3 {. _: d* `( Q" q: g/ s void __fastcall TForm1:ackParadoxTable(hDBIDb hDB, AnsiString TblName) - h# k! h6 E3 H{ " e* i7 b' q2 m9 J/ G //Paradox table use a quite different way to be packed than & k/ ~* X9 w2 @: S( t3 ` //DBase or Foxpro table, it use the DBiDoRestructure not the ' J- r% _) k& v+ n3 p% m // DBiPackTable , u* `7 ^' B/ B3 @/ D DBIResult rslt; $ l; G7 g7 o1 g7 V$ U CRTblDesc TblDesc; ; y0 L1 x( N d) u8 M- M& H //filled the structure CRTbiDesc with 0 9 ]0 _ P/ H1 J" u U; i/ u memset((void *)&TblDesc,0,sizeof(CRTblDesc)); # L: E, g9 ]2 r; G; A* s8 m //copy the table name and type to the structure 4 O6 [ m/ W- R8 E7 m& ~: v lstrcpy(TblDesc.szTblName,TblName.c_str()); 0 N9 Q4 M+ B3 t) i+ k+ N8 {: P! y lstrcpy(TblDesc.szTblType,szPARADOX); : N8 `; D, {# L$ Q i) Y //set bPack to true to specify Pack Function 3 U$ I* @ |& g3 x, Y" V8 a; {) c TblDesc.bPack=true; / r. t) f; H. X( h //Pack the table 0 e! ]3 f" [0 L. q. H! k rslt=DbiDoRestructure(hDB,1,&TblDesc,NULL,NULL,NULL,false); / W' J, l/ i" q: m) y# {& M if(rslt!=DBIERR_NONE) # ~2 b0 g/ a1 d6 h) [ Application->MessageBox("不能压缩表", 5 h. i$ t% H2 d t7 @ "压缩数据表出错",MB_ICONERROR); * T1 @" h4 i" \- l4 a } & {4 V3 v* F+ r3 E. w1 `4 p注意,在Restructure之前,表必须处于关闭状态。以下例程调用PackParadoxTable. 2 Y/ A+ m. X, Y 6 R6 q7 t& A5 ~9 K' A6 I7 h* T5 Hvoid __fastcall TForm1:ackTable(AnsiString table_name) " J% v4 W4 z$ z. ^( f% y { / W) {- c, Y7 E' N" c //Pack the table 3 W% S. }& w" c2 P1 W- _( S TTable *temp_table=new TTable(Form1); 3 L4 t- y: [$ U. }3 a) H7 w( g temp_table->DatabaseName="YourDatabaseAlias"; 2 H6 H$ T6 @! T8 N; {* D( L# R temp_table->TableName=table_name; / k0 X2 N H. } F3 q! J+ ] temp_table->Exclusive=true; / e$ v6 M' D* f9 U7 I/ M& X1 `3 M temp_table->Open(); $ G" }- @" V% s K //get the Database Handle 2 @6 C% I9 ~! @$ H, x' t# q) j hDBIDb hDB=temp_table->DBHandle; , b& A! a8 Q8 w temp_table->Close(); 2 }3 C' d, M# ?% r3 _4 C; w* l 9 K3 i. f" _' n J' I2 w4 P( O" T' [5 H PackParadoxTable(hDB,table_name); 9 `3 D1 n: }+ a: F - }' C! b) s4 b2 ? temp_table->Close(); & y* j1 H! h x9 _/ d8 ^ temp_table->Free(); # B% e( E; j/ z& `, a/ M3 j } / b7 }- x* [5 C2 X; ]# V * ]& _8 m0 o9 R7 d) a' T, C " V8 H: y! [9 c( q% l& j对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-11 08:43 , Processed in 0.266862 second(s), 52 queries .

回顶部