Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизСжать и сохранить базу Access Найти похожие ветки
← →
makle © (2005-06-06 15:31) [0]Как программно из Delphi сжать базу Access? (то, что выполняется в самом аксесе в меню сервис)
← →
Digitman © (2005-06-06 15:35) [1]объект DAO.DBEngine имеет метод RepairDatabase().
именно этот метод вызывает Access по команде юзера сжать базу
← →
sniknik © (2005-06-06 16:16) [2]объект JRO.JetEngine имеет метод CompactDatabase().
именно этот метод вызывает Access по команде юзера сжать базу
;о))
← →
DSKalugin © (2005-06-06 17:13) [3]
{Программное сжатие базы данных Access используя JRO (Jet Replication Objects)
Процедура позволяет сжать базу данных в формате Access, используя JRO (Jet Replication Objects). Действие аналогичное пункту меню в Access "Сервис -> Служебные программы -> Сжать и восстановить базу данных".
Параметры:
* DatabaseName - путь к исходной (не сжатой) базе данных
* DestDatabaseName - путь к сжатой базе данных (по умолчанию пустой - в этом случае исходная база заменяется сжатой)
* Password - пароль базы данных (по умолчанию пустой)
PS. этот код был написан в связи с тем что аналогичная процедура через DAO у многих не работала (по пока неизвестным для меня причинам)
Зависимости: windows,SysUtils,ComObj,Dialogs (Dialogs можно исключить используя MessageBox для вывода сообщения исключительной ситуации)
Автор: savva, savva@nm.ru, ICQ:126578975, Орел
Copyright: Сапронов Алексей (Savva)
Дата: 9 сентября 2002 г.
**************************************************** }
Procedure CompactDatabase_JRO(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;
except
// выдаем сообщение об исключительной ситуации
on E: Exception do ShowMessage(e.message);
end;
end;
← →
sniknik © (2005-06-06 17:41) [4]проще было дать ссылку
http://delphibase.spb.ru/?action=viewfunc&topic=baseaccess&id=10303
> PS. этот код был написан в связи с тем что аналогичная процедура через DAO у многих не работала (по пока неизвестным для меня причинам)
просто dao устарел, уже. я както пробовал вообще сносить его с машины (те. начисто, даже файл dao360.dll затер), аксесс работать не перестал...
← →
DSKalugin © (2005-06-06 18:48) [5]>проще было дать ссылку
Меня тоже интересовал этот вопрос, поэтому нашел этот пример быстренько поиском по словам CompactDatabase благодаря твоей наводке :-))
Ну зато другим не надо будет париться искать код.
Так наглядней :-)
← →
Vit@ly © (2005-06-06 18:59) [6]Уже было
function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var
v: OLEvariant;
begin
Result := True;
try
v := CreateOLEObject("JRO.JetEngine");
try
V.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB,
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB+"x;Jet OLEDB:Engine Type=5");
DeleteFile(DB);
RenameFile(DB+"x",DB);
finally
V := Unassigned;
end;
except
Result := False;
end;
end;
Так вроде бы проще
← →
Digitman © (2005-06-07 08:16) [7]
> sniknik © (06.06.05 16:16) [2]
Access Access"у рознь)
скажем, Access97 не знает никаких JRO и работает напрямую именно с DAO
и метод CompactDatabase у DAO.DBEngine тоже имеется
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c