Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 787

•  TDictionary Custom Sort  5 902

•  Fast Watermark Sources  5 702

•  3D Designer  8 473

•  Sik Screen Capture  6 036

•  Patch Maker  6 480

•  Айболит (remote control)  6 472

•  ListBox Drag & Drop  5 337

•  Доска для игры Реверси  94 940

•  Графические эффекты  6 677

•  Рисование по маске  5 797

•  Перетаскивание изображений  4 859

•  Canvas Drawing  5 235

•  Рисование Луны  4 958

•  Поворот изображения  4 504

•  Рисование стержней  3 186

•  Paint on Shape  2 432

•  Генератор кроссвордов  3 306

•  Головоломка Paletto  2 619

•  Теорема Монжа об окружностях  3 402

•  Пазл Numbrix  2 248

•  Заборы и коммивояжеры  2 908

•  Игра HIP  1 878

•  Игра Go (Го)  1 793

•  Симулятор лифта  2 130

•  Программа укладки плитки  1 857

•  Генератор лабиринта  2 296

•  Проверка числового ввода  1 983

•  HEX View  2 294

•  Физический маятник  1 957

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как программно паковать таблицы Paradox или восстанавливать индексы



Автор: Сергей А.


unit repair_u;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, BDE, StdCtrls;

type
  TForm1 = class(TForm)
    tb: TTable;
    te: TTable;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
// Pack a Paradox or dBASE table
// The table must be opened execlusively before calling this function…

procedure PackTable(Table: TTable);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
begin
  // Make sure the table is open exclusively so we can get the db handle…
  if not Table.Active then
    raise EDatabaseError.Create('Table must be opened to pack');
  if not Table.Exclusive then
    raise EDatabaseError.Create('Table must be opened exclusively to pack');
  // Get the table properties to determine table type…
  Check(DbiGetCursorProps(Table.Handle, Props));
  // If the table is a Paradox table, you must call DbiDoRestructure…
  if (Props.szTableType = szPARADOX) then
  begin
    // Blank out the structure…
    FillChar(TableDesc, sizeof(TableDesc), 0);
    // Get the database handle from the table's cursor handle…
    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
    // Put the table name in the table descriptor…
    StrPCopy(TableDesc.szTblName, Table.TableName);
    // Put the table type in the table descriptor…
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    // Set the Pack option in the table descriptor to TRUE…
    TableDesc.bPack := True;
    // Close the table so the restructure can complete…
    Table.Close;
    // Call DbiDoRestructure…
    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
  end
  else
    {// If the table is a dBASE table, simply call DbiPackTable…} if
      (Props.szTableType = szDBASE) then
      Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
    else
      // Pack only works on PAradox or dBASE; nothing else…
      raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +
        'type to pack');
  Table.Open;
end;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  tb.open;
  PackTable(tb);
  tb.close;
  te.open;
  PackTable(te);
  te.close;
end;

end.





Похожие по теме исходники

Создание таблиц в Paradox




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте