程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> BCB中如何給Table減肥

BCB中如何給Table減肥

編輯:關於C++

用BCB進行多媒體數據庫開發時常會發現這樣一個現象,當你把一條記錄從表中刪除時,表檔 大小並沒有相應減小。這樣在進行多次插入刪除之後,表文件就會越來越龐大。之所以會出現這種現象,是因為TTable控件的 Delete Method並不真正從表中刪除記錄,而只是在記錄前加上一個刪除標志。在DBase和Foxpro中用Pack語句對表進行壓縮,但在TTable類中卻沒有相應的函數。其實在BDE的API函數中已經提供了DbiPackTable來對DBase或Foxpro表進行壓縮,但是這個函數對Paradox的表不起作用。要想給Paradox 表減肥得用DbiDoRestructure函數來完成,以下例程完成Pack Paradox表的功能。

//This function Pack the Paradox table. write by zodiac
void __fastcall TForm1::PackParadoxTable(hDBIDb hDB, AnsiString TblName)
{
//Paradox table use a quite different way to be packed than
//DBase or Foxpro table, it use the DBiDoRestructure not the
// DBiPackTable
DBIResult rslt;
CRTblDesc TblDesc;
//filled the structure CRTbiDesc with 0
memset((void *)&TblDesc,0,sizeof(CRTblDesc));
//copy the table name and type to the structure
lstrcpy(TblDesc.szTblName,TblName.c_str());
lstrcpy(TblDesc.szTblType,szPARADOX);
//set bPack to true to specify Pack Function
TblDesc.bPack=true;
//Pack the table
rslt=DbiDoRestructure(hDB,1,&TblDesc,NULL,NULL,NULL,false);
if(rslt!=DBIERR_NONE)
Application->MessageBox("不能壓縮表","壓縮數據表出錯",MB_ICONERROR);
}

注意,在Restructure之前,表必須處於關閉狀態。以下例程調用PackParadoxTable.

void __fastcall TForm1::PackTable(AnsiString table_name)
{
//Pack the table
TTable *temp_table=new TTable(Form1);
temp_table->DatabaseName="YourDatabaseAlias";
temp_table->TableName=table_name;
temp_table->Exclusive=true;
temp_table->Open();
//get the Database Handle
hDBIDb hDB=temp_table->DBHandle;
temp_table->Close();
PackParadoxTable(hDB,table_name);
temp_table->Close();
temp_table->Free();
}

對Foxpro和DBase的Pack參見BDE API Help的DbiPackTable函數說明。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved