Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сжатие бд в Access [D6, Access]


zergey ©   (2003-09-30 18:44:00) 

Вопрос несколько месяцев назад поднимался на форуме, но найти ту ветку я что-то не смог. Может напомните: как программно сжать базу данных *.mdb.
Заранее спасибо


zergey   (2003-10-02 18:19:00) [1]

Всем спасибо.


savva   (2003-10-02 09:43:00) [2]

> Snake (02.10.03 06:19) [4]

можно было и просто ссылку дать

http://delphibase.endimus.com/?action=viewfunc&topic=baseaccess&id=10165
http://delphibase.endimus.com/?action=viewfunc&topic=baseaccess&id=10303


Е-Моё имя   (2003-10-02 07:40:00) [3]

танкисты на форуме по базам? оригинально...


> "Невозможно найти устанавливаемый ISAM"

поищи в яндексе, найдешь решение


Snake   (2003-10-02 06:19:00) [4]

Наслаждайся ;)

Procedure CompactDatabase(DatabaseName:String;DestDatabaseName:String="";Password:String="");
Const
Provider = "Provider=Microsoft.Jet.OLEDB.4.0;";
Var
TempName : Array[0..MAX_PATH] of Char; // имя временного файла
TempPath : String; // путь до него
Name : String;
Src,Dest : WideString;
V : Variant;
begin
try
Src := Provider + "Data Source=" + DatabaseName;
if DestDatabaseName<>"" then
Name:=DestDatabaseName
else begin
// выходная база не указана - используем временный файл
// получаем путь для временного файла
TempPath:=ExtractFilePath(DatabaseName);
if TempPath="" Then TempPath:=GetCurrentDir;
//получаем имя временного файла
GetTempFileName(PChar(TempPath),"mdb",0,TempName);
Name:=StrPas(TempName);
end;
DeleteFile(PChar(Name));// этого файла не должно существовать :))
Dest := Provider + "Data Source=" + Name;
if Password<>"" then begin
Src := Src + ";Jet OLEDB:Database Password=" + Password;
Dest := Dest + ";Jet OLEDB:Database Password=" + Password;
end;

V:=CreateOleObject("jro.JetEngine");
try
V.CompactDatabase(Src,Dest);// сжимаем
finally
V:=0;
end;
if DestDatabaseName="" then begin // т.к. выходная база не указана
DeleteFile(PChar(DatabaseName)); //то удаляем не упакованную базу
RenameFile(Name,DatabaseName); // и переименовываем упакованную базу
end;
Application.MessageBox("Сжатие базы банных успешно завершено","",
MB_ICONINFORMATION+MB_OK+MB_APPLMODAL);
except
// выдаем сообщение об исключительной ситуации
on E: Exception do begin StopWait; ShowMessage(e.message); end;
end;
end;


kraabs   (2003-10-02 01:24:00) [5]

Недавно у самого стояла такая задачка.
Завтра обязательно скину исходничек, т.к. он у меня на работе Пока.


zergey   (2003-10-01 20:33:00) [6]

>2Е-Моё имя
Пишу как в хелпе по Аксесу:
v.CompactDatabase
("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:\1.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:\2.mdb")
А получается ошибка: "Невозможно найти устанавливаемый ISAM"
Не подскажешь, в чем может быть дело?


Е-Моё имя   (2003-10-01 09:09:00) [7]

V:=CreateOleObject("jro.JetEngine")
V.CompactDatabase(Src,Dest)


Наверх

Титульная страница Поиск, карта сайта Написать письмо