Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизADO Найти похожие ветки
← →
BAYES © (2004-03-10 10:28) [0]Привет!
Возник вопрос по сжатию(упаковки) *.mdb, а то что-то БД жутко разростаеться.
Поискал на других форумах, многие советуют создавать новый *.mdb и копировать туда данные. Imho это бред.
Может есть что-то вроде PackTable, но только для *.mdb???
← →
Я © (2004-03-10 10:31) [1]1. Самое простое- воспользоваться MS Access (монопольно). Сервис - Служебные программы - Сжать и восстановить базу данных.
2. DAO
← →
sniknik © (2004-03-10 10:34) [2]
function TDMod.PackAccess(BaseName: string): boolean;
var je: Variant;
sPath: string;
begin
result:= false;
if UpperCase(Copy(BaseName, Length(BaseName)-3, 4)) <> ".MDB" then BaseName:= BaseName + ".MDB";
if Pos(":\",BaseName) = 0 then BaseName:= GetCurrentDir+"\"+BaseName;
sPath:= ExtractFilePath(BaseName);
try
try
ADOConnection1.Close;
ADOConnection2.Close;
je:=CreateOleObject("JRO.JetEngine");
je.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+BaseName+";",
"Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+sPath+"NewBase$$$.Mdb;"+
"Jet OLEDB:Encrypt Database=True");
DeleteFile(BaseName);
RenameFile(sPath+"NewBase$$$.Mdb", BaseName);
result:= true;
except
on E: Exception do DoIfError(E.Message);
end;
finally
je:= Null;
end;
end;
← →
YurikGl © (2004-03-10 11:19) [3]А еще там есть галочка,"сжимать базу при закрытии"
← →
BAYES © (2004-03-10 11:48) [4]Пасиба, но я это(MSAccess) все знаю, мне как говориться программно. Вот разбираюсь с многоуважаемым sniknik.
sniknik - твой код добавил больше вопросов чем ответов.
← →
sniknik © (2004-03-10 12:05) [5]> sniknik - твой код добавил больше вопросов чем ответов.
это из программы, "лишнее" убрать думаю не проблема.
не работает? то что? или просто вопросы по "принципу", ну так спрашивай.
← →
BAYES © (2004-03-10 12:43) [6]Да, вопросы по принципу.
Немного для себя упрастил.var je: Variant;
old,new: string;
begin
old:="c:\data\db.mdb";
new:="c:\data\1\db.mdb";
DM.ADOConnection1.Close;
je:=CreateOleObject("JRO.JetEngine");
je.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source="+old+";",
"Provider=Microsoft.Jet.OLEDB.4.0;"
+"Data Source="+new+";");
Но это только если сжатие происходит в др. каталог.
В твоем коде как раз и предусматриваеться что бы сжатие происходило в одном каталоге. Но что-то не в силах высматреть его. Не затруднит тебя пояснить код?!
← →
SPIRIT © (2004-03-10 12:48) [7]Сжимает в новый
удаляет старый
переименовывает новый в старый..
делай также
DeleteFile("c:\data\db.mdb");
RenameFile("c:\data\1\db.mdb", "c:\data\db.mdb");
← →
VLAD-MAL (2004-03-10 12:54) [8]DatabaseName = "db1.mdb"
""Закрыть БД
Db.Close
Screen.MousePointer = vbHourglass
""Сжать БД
DBEngine.CompactDatabase App.Path & "\" & CommonDatabaseName, App.Path & "\" & CommonDatabaseName & "_"
""Удалить старый файл и переименовать новый
Kill App.Path & "\" & DatabaseName
Name App.Path & "\" & DatabaseName & "_" As App.Path & "\" & DatabaseName
Screen.MousePointer = vbDefault
← →
sniknik © (2004-03-10 13:52) [9]> Немного для себя упрастил.
вот это забыл
je:= Null;
а оно очень желательно (если больше с обьектом работать не будеш надо завершить), у меня оно даже в finally вынесено (отработает даже если выше случится глюк, делай так же).
про переименовку вроде уже прояснили, у меня в один каталг т.к. имя новое задается NewBase$$$.Mdb (то которого у меня точно не зададут, в принципе можно любое даже $$$.$$$) после переименовывается, а в тот же самый файл не пакуется файлы должны физически разными быть (нельзя новое и старое имя одно и тоже).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c