Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: программное сжатие таблиц Paradox  (Прочитано 6725 раз)
0 Пользователей и 1 Гость смотрят эту тему.
liones
Постоялец

ru
Offline Offline
Пол: Женский

« : 02-11-2009 06:28 » 

Есть ли вобще такая возможность? Поскольку записи периодически удаляются, то размер файла бд не уменьшается, т.е. ссылки на удаленные записи сохраняются.
Нашла утилиту, которая сжимает таблицы Paradox. Но меня это не совсем устраивает.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-11-2009 10:30 » 

liones, можно классическим способом: данные копируются в новую таблицу, потом старую удалить и новую переименовать как старую.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
liones
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #2 : 02-11-2009 10:38 » 

А других способов нет?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 02-11-2009 13:12 » 

liones, а зачем другие, если эти работают?, причем при этом, практически, не происходит отказа в обслуживании
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 03-11-2009 14:13 » 

liones, если пишете о программном сжатии, нехило бы указывать среду. непонятно, на каком языке приводить код?

для dbf можно использовать функцию dbiPackTable. а вот для Парадокса этот финт не пройдёт, нам придётся делать программную реструктуризацию таблицы, для чего заполнить соответствующую структуру и выставить ей флажок "Pack Table", аналогично тому, как это происходит в самом Database Desktop.

Код:
procedure PackTable(TblName : String);
var
  tbl     : TTable;
  cProps  : CURProps;
  hDb     : hDBIDb;
  TblDesc : CRTblDesc;
begin

  tbl := TTable.Create(nil);
  with tbl do begin
    Active := False;
    DatabaseName := ExtractFilePath(TblName);
    TableName := ExtractFileName(TblName);
    Exclusive := True;
    Open;
  end;

  SetCurrentDir(ExtractFilePath(TblName));

  // открываем таблицу с эксклюзивными правами, иначе Restructure не проканает.
  if not tbl.Active then
    raise EDatabaseError.Create('Table must be opened to pack');

  if not tbl.Exclusive then
    raise EDatabaseError.Create('Table must be opened exclusively to pack');

  // Get the table properties to determine table type...
  Check(DbiGetCursorProps(tbl.Handle, cProps));

  // для парадоксовских таблиц юзаем dbiDoRestructure
  if (cProps.szTableType = szPARADOX) then
    begin
      // чистим структуру
      FillChar(TblDesc, sizeof(TblDesc), 0);
      // получаем дескриптор БД
      Check(DbiGetObjFromObj(hDBIObj(tbl.Handle), objDATABASE, hDBIObj(hDb)));
      // задаём имя таблицы
      StrPCopy(TblDesc.szTblName, tbl.TableName);
      // задаём тип таблицы
      StrPCopy(TblDesc.szTblType, cProps.szTableType);
      // выставляем флажок для упаковки
      TblDesc.bPack := True;
      // закрываем открытую таблицу, иначе dbiDoRestructure обломается
      tbl.Close;
      // пакуем
      Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
    end
  else
    // для DBase тупо дёргаем dbiPackTable
    if (cProps.szTableType = szDBASE) then
      Check(DbiPackTable(tbl.DBHandle, tbl.Handle, nil, szDBASE, True))
    else
      // ругаемся на таблицы всех прочих типов
      raise EDatabaseError.Create('You can only pack Paradox or dBase tables!');

  with tbl do begin
    if Active then
      Close;
    Free;
  end;
end;
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines