![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сжатие БД ! [D7, Win95/98, Win2k, WinXP]
D3viL © (2004-08-27 09:07:00)Как сжать и восстановить Базу Acess.
1)При удалении данных размер базы не изменяется даже если в базе 1 запись.
2)База может весить очень много (2Гб).
В Acess'e есть менюшка:
"сервис>служебные программы>сжать и восстановить базу"
при выполнении бд становиться сжатой,
как сделать такое в моей проге (в Делфи 7)!
Erik1 (2004-08-30 17:48:00) [1]Лучше использовать MSJet.
{ Microsoft DAO 3.6 Object Library }
{ Version 5.0 }
GUID_DAO36: TGUID = (D1:$100; D2:0; D3:$10; D4:($80,0,0,$AA,0,$6D,$2E,$A4));
_DBEngine = interface(_DAO)
['{00000021-0000-0010-8000-00AA006D2EA4}']
procedure CompactDatabase(const SrcName, DstName: WideString;DstLocale, Options, SrcLocale: OleVariant); safecall;
Также может понадобится
procedure RepairDatabase(const Name: WideString); safecall;
Это прямой интерфейс!
46_55_41_44 (2004-08-27 09:29:00) [2]Да кстати выдрал это из своей проги... работает!!:)
46_55_41_44 (2004-08-27 09:26:00) [3]var
je : Variant;
Dest,Src : WideString;
curBase : String;
begin
if MessageBox(Application.Handle, PChar('Do you really want to Compact database?'), PChar('RRProjects'),MB_YesNo) = mrNo then
exit;
AdoConnection.Close;//Close ADO Connection
curBase := 'Путь к базе\Имя.mdb';
try
Screen.Cursor := crHourGlass;
Src := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + curBase;
Dest := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + ExtractFilePath(curBase) + '\_pack$.mdb';
try
je := CreateOleObject('JRO.JetEngine');
except
MessageBox(Application.Handle, PChar('Cannot create JetEngine object!'), PChar('Error'),MB_ICONINFORMATION);
exit;
end;
je.CompactDatabase(src, dest);
DeleteFile(curBase);
RenameFile(ExtractFilePath(curBase) + '\_pack$.mdb', curBase);
finally
AdoConnection.Close;
screen.Cursor := crDefault;
end;