![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 21.02.2007
Сообщений: 1
|
![]()
Подскажите кто знает как можно програмно удалить ненужные записи в базе данных физически. Во всей документации, что встречал указывается, что по команде DELL записи из базы данных удаляются автоматически, однако на практике при работе с программой все записи как и во всех других программах (FoxPro и т.п.) по данной команде записи помечаются как удаленные и при работе далее не видятся, но на диске остается полный файл, размер которого от раза к разу растет. В том же FoxPro есть команда PACK, после выполнения которой все помеченные на удаление записи удаляются физически и файл *.dbf может быть = 0. В DELPHI не могу никак найти его аналог, ничего получается, а файл все растет и растет. Помогите кто знает!!!
|
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Это описано в файлах помощи BDE по адресу BorlandShared\BDE, а не в хэлпах Дельфи.
Если не ошибаюсь, функция DbiPackTable или что-то вроде... |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 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; |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как упаковать прогу (инсталлятор) | HAMMAN | Софт | 5 | 06.06.2008 18:32 |