Paradoxテーブルのパック(再構築)

ParadoxのDBは使い込むと肥大化していきます。プログラム上からのパック方法です。
下記のコードを記述してください。

使用コンポーネント
TTable


uses
 BDE

//データベース最適化
var
 Props: CURProps;
 hDb: hDBIDb;
 TableDesc: CRTblDesc;
begin
 //テーブルの再構築(パック)
 Table1.Close;
 try
  Table1.Exclusive := True;
  Table1.Open;

  //テーブルのカーソルハンドルの取得
  DbiGetCursorProps(Table1.Handle, Props);
  //構造体を空白にする
  FillChar(TableDesc, sizeof(TableDesc), 0);
  //テーブルのカーソルハンドルからデータベースハンドルを取得
  DbiGetObjFromObj(hDBIObj(Table1.Handle), objDATABASE, hDBIObj(hDb));
  //テーブルディスクプリタにテーブル名を格納
  StrPCopy(TableDesc.szTblName, Table1.TableName);
  //テーブルディスクプリタにテーブルの形式を格納
  StrPCopy(TableDesc.szTblType, Props.szTableType);
  //テーブルディスクプリタのPackオプションをTRUEに設定
  TableDesc.bPack := True;
  //テーブルをクローズし再構築を終了
  Table1.Close;
  //DbiDoRestructure関数の呼び出し
  DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False);

  Table1.Exclusive := False;
  Table1.Open;
 except
  on EDatabaseError do
  MessageDlg('データベースを使っている人がいます!!' + #13#10 +
   'そのため再構築できません。' + #13#10 +
   '誰も使用中で無い時に再度、再構築して下さい。',mtError,[mbOK],0);
 end;
end;