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

Пакование таблиц dBASE 4

Delphi , Базы данных , DBASE и DBF

Пакование таблиц dBASE 4

Nomadic

Для dBase:


uses
  DbiProcs;

with Table do
begin
  OldState := Active;
  Close;
  Exclusive := True;
  Open;

  DbiPackTable(DBHandle, Handle, nil, nil, True);
  {^ здесь можно добавить check()}

  Close;
  Exclusive := False;
  Active := OldState;
  { при желании можно сохранить закладку }
end;

Автор: Pavel Kulchenko

Пpимеp для Paradox:


uses BDE; // for D3, для D2 не помню (что-то типа DbiProcs и еще что-то)

// для пpимеpа
tLog: TTable; // таблица, юзающая d:\db\log.db

var
  TblDesc: CRTblDesc;
  rslt: DBIResult;
  Dir: string; //имеется в виду huge string т.е. {$H+}
  hDb: hDbiDb;

begin
  tLog.Active := False; //деактивиpуем TTable

  SetLength(Dir, dbiMaxNameLen + 1);
  DbiGetDirectory(tLog.DBHandle, False, PChar(Dir));
  SetLength(Dir, StrLen(PChar(Dir)));

  DbiOpenDatabase(nil, nil, dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb);

  DbiSetDirectory(hDb, PChar(Dir));

  FillChar(TblDesc, sizeof(CRTblDesc), 0);
  StrPCopy(TblDesc.szTblName, 'd:\db\log.db');
  // здесь должно быть полное имя файла
  //котоpое можно: а) ввести pуками;
  //б) вытащить из пpопеpтей таблицы;
  //в) вытащить из алиаса;
  //г) см. FAQ
  StrCopy(TblDesc.szTblType, szParadox);
  //BTW тут может и szDBase стоять

  TblDesc.bPack := TRUE;

  DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
  DbiCloseDatabase(hDb);

end;

// можно еще чеки ввести, но облом :-)

Код на Delphi для упаковки и переструктуризации таблицы в формате dBase 4

В первой части кода используется модуль DbiProcs, а в процедуре Table выполняются следующие шаги:

  1. Закрытие текущей таблицы.
  2. Открытие таблицы в исключительном режиме (для предотвращения одновременного доступа).
  3. Вызов функции DbiPackTable для упаковки таблицы.
  4. Закрытие таблицы.
  5. Восстановление исходного состояния таблицы (включая ее активный статус).

Комментарий ^ здесь можно добавить check() предполагает, что можно добавить проверку ошибок или специфических условий перед упаковкой таблицы.

В второй части кода используется модуль BDE, а в процедуре tLog выполняются следующие шаги:

  1. Деактивация объекта TTable.
  2. Получение директории файла базы данных с помощью функции DbiGetDirectory.
  3. Открытие нового handles для базы данных с помощью функции DbiOpenDatabase.
  4. Установка текущей директории в полученную в шаге 2.
  5. Создание структуры CRTblDesc и заполнение ее информацией о таблице (имя, тип).
  6. Установка флага упаковки (bPack) в значение TRUE.
  7. Вызов функции DbiDoRestructure для упаковки таблицы.
  8. Закрытие handles для базы данных с помощью функции DbiCloseDatabase.

Комментарий // можно еще чеки ввести, но облом :-) предполагает, что можно добавить дополнительные проверки или код обработки ошибок, но это не необходимо в этом случае.

Альтернативные решения:

Для баз данных dBase:

  • Вы можете использовать функцию DbiPackTable с дополнительными параметрами для контроля процесса упаковки, например, указанием уровня сжатия или установкой таймаута.
  • Вместо использования исключительного режима можно использовать общий режим и реализовать механизмы блокировки для предотвращения одновременного доступа.

Для баз данных Paradox:

  • Вы можете использовать компонент TSession из модуля BDE для управления соединениями с базами данных и транзакциями.
  • Вместо упаковки таблицы вручную можно использовать компонент TParadoxTable из модуля Paradox для сжатия или переструктуризации данных таблицы.

В статье описано пакование таблиц dBASE и Paradox с помощью библиотек DbiProcs и BDE.


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

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




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


:: Главная :: DBASE и DBF ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:22:30/0.0034348964691162/0