Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , Paradox

Как программно паковать таблицы 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.

Программа на Delphi, демонстрирующая программное упаковку таблиц в базах данных Paradox или dBASE с помощью BDE (Borland Database Engine).

Вот разбивка кода:

Процедура PackTable

Эта процедура принимает объект TTable в качестве входного параметра и упаковывает его. Она выполняет следующие действия:

  1. Проверяет, является ли таблица открыта исключительно, и если нет, то выдает ошибку.
  2. Получает свойства таблицы с помощью функции DbiGetCursorProps.
  3. Если тип таблицы - Paradox, то:
    • Очищает структуру таблицы с помощью FillChar.
    • Получает handle базы данных из handle курсора таблицы с помощью функции DbiGetObjFromObj.
    • Вставляет имя и тип таблицы в дескриптор таблицы.
    • Устанавливает параметр Pack в значение True.
    • Закрывает таблицу.
    • Вызывает функцию DbiDoRestructure, чтобы упаковать таблицу.
  4. Если тип таблицы - dBASE, то просто вызывает функцию DbiPackTable.

Процедура Button1Click

Эта процедура вызывается при клике кнопки на форме. Она открывает две таблицы (tb и te) и упаковывает их с помощью процедуры PackTable.

Замечания

  • Программа использует BDE (Borland Database Engine) для взаимодействия с базами данных Paradox или dBASE.
  • Функции DbiGetCursorProps, DbiGetObjFromObj, DbiDoRestructure и DbiPackTable являются частью API BDE.
  • Программа предполагает, что таблицы открыты исключительно перед вызовом процедуры PackTable.

Альтернативное решение

Если вы ищете альтернативный способ упаковки таблиц в базах данных Paradox или dBASE, вам может помочь третьесторонняя библиотека,such as dbExpress or UniDAC, which provide more modern and efficient ways of interacting with databases. However, keep in mind that these libraries may require additional setup and configuration.

Надеюсь, это поможет! Пожалуйста, если у вас есть дополнительные вопросы. 😊

В статье описывается процесс программного пакования таблиц Paradox или восстановления индексов с использованием библиотеки BDE и языка программирования Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Paradox ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 13:02:16/0.0050759315490723/1