Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2007, 20:57   #1
Евгений_нн
Новичок
Джуниор
 
Регистрация: 21.02.2007
Сообщений: 1
По умолчанию Помогите упаковать БД

Подскажите кто знает как можно програмно удалить ненужные записи в базе данных физически. Во всей документации, что встречал указывается, что по команде DELL записи из базы данных удаляются автоматически, однако на практике при работе с программой все записи как и во всех других программах (FoxPro и т.п.) по данной команде записи помечаются как удаленные и при работе далее не видятся, но на диске остается полный файл, размер которого от раза к разу растет. В том же FoxPro есть команда PACK, после выполнения которой все помеченные на удаление записи удаляются физически и файл *.dbf может быть = 0. В DELPHI не могу никак найти его аналог, ничего получается, а файл все растет и растет. Помогите кто знает!!!
Евгений_нн вне форума Ответить с цитированием
Старый 21.02.2007, 21:33   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это описано в файлах помощи BDE по адресу BorlandShared\BDE, а не в хэлпах Дельфи.
Если не ошибаюсь, функция DbiPackTable или что-то вроде...
mihali4 вне форума Ответить с цитированием
Старый 21.02.2007, 23:00   #3
nova-alex
Пользователь
 
Регистрация: 06.11.2006
Сообщений: 51
По умолчанию

Признаюсь честно, взял этот пример из DelphiWorld, но этот пример рабочий, просто в своих кодах примера не нашел, а делал так-же.

Приведенная ниже функция пакует таблицы Paradox и dBase (требуется компонент TDatabase, указывающий на ту же директорию, где хранятся таблицы):

uses DBIProcs, DBITypes, DBIErrs;

function PackTable(tbl: TTable; db: TDatabase): DBIResult;
var
crtd: CRTblDesc;
begin
Result := DBIERR_NA;
with tbl do
if Active then
Active := False;
with db do
if not Connected then
Connected := True;
FillChar(crtd, SizeOf(CRTblDesc), 0);
StrPCopy(crtd.szTblName, tbl.TableName);
crtd.bPack := True;
Result := DbiDoRestructure(db.Handle, 1, @crtd, nil, nil, nil, FALSE);
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
if PackTable(Table1,DataBase1) = DBIERR_NONE then
.....
else
MessageBeep(0);
end;
nova-alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как упаковать прогу (инсталлятор) HAMMAN Софт 5 06.06.2008 18:32