用BCB进行多媒体数据库开发时常会发现这样一个现象,当你把一条记录从表中删除时,表的大小并没有相应减小。这样在进行多次插入删除之后,表文件就会越来越庞大。之所以会有这种现象,是因为TTable控件的
Delete % D& m# Q! P" n" H) m+ H
Method并不真正从表中删除记录,而只是在记录前加上一个删除标志。在DBase和Foxpro中有Pack语句对表进行压缩,但在TTable类中却没有相应的函数。其实在BDE的API函数中已经提供了DbiPackTable来对DBase或Foxpro表进行压缩,但是这个函数对Paradox的表不起作用。要想给Paradox
表减肥得用DbiDoRestructure函数来完成,以下例程完成Pack Paradox表的功能。
- C7 T) B5 w2 a, m; a
//This function Pack the Paradox table. write by zodiac 2 j; }" ]' }$ n0 M% U
void __fastcall TForm1:
ackParadoxTable(hDBIDb hDB, AnsiString TblName)
{ ( y. [' u- N+ M- j
//Paradox table use a quite different way to be packed than
//DBase or Foxpro table, it use the DBiDoRestructure not the
// DBiPackTable
DBIResult rslt; + G$ |1 h; C9 v% l
CRTblDesc TblDesc;
//filled the structure CRTbiDesc with 0
memset((void *)&TblDesc,0,sizeof(CRTblDesc)); # i3 ~4 @, F5 o7 J6 {
//copy the table name and type to the structure : S9 l1 Y, H3 Q0 ?6 N- l
lstrcpy(TblDesc.szTblName,TblName.c_str()); % T5 w' L7 q/ I2 g y
lstrcpy(TblDesc.szTblType,szPARADOX); 7 t$ W8 _, j6 {- h
//set bPack to true to specify Pack Function
TblDesc.bPack=true;
//Pack the table
rslt=DbiDoRestructure(hDB,1,&TblDesc,NULL,NULL,NULL,false); - Y, d b5 Q+ O" _- S7 m2 ~- l, k+ b
if(rslt!=DBIERR_NONE) : p8 W: }3 c3 d- i) _
Application->MessageBox("不能压缩表",
"压缩数据表出错",MB_ICONERROR);
}
注意,在Restructure之前,表必须处于关闭状态。以下例程调用PackParadoxTable.
! m; ~ l0 O4 W2 `- i5 i0 u* z+ x
void __fastcall TForm1:
ackTable(AnsiString table_name)
{ + F0 U( r, _; T& [% ~& N
//Pack the table
TTable *temp_table=new TTable(Form1);
temp_table->DatabaseName="YourDatabaseAlias";
temp_table->TableName=table_name;
temp_table->Exclusive=true; 1 g9 B+ \' l+ b: h2 n
temp_table->Open(); ( @5 E$ ?2 i# Z- c5 F
//get the Database Handle ) K* F2 Y8 m# [# ^/ k( _
hDBIDb hDB=temp_table->DBHandle; 4 W! j1 t% m3 V0 d/ F0 T6 m' U( c
temp_table->Close(); 1 c6 N! D5 B4 Q @
PackParadoxTable(hDB,table_name);
! H2 B& M2 P8 ^: a! Y# I/ Q, n. K
temp_table->Close();
temp_table->Free(); 4 ], [. L0 u2 s* u4 E
}
. Q, l2 \0 ]9 @ S) H
对Foxpro和DBase的Pack参见BDE API Help的DbiPackTable函数说明。
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |