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

如何給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