Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1079462465
Шнур
2004-03-16 21:41
2004.04.04
Компоненты


14-1078946455
***ghost***
2004-03-10 22:20
2004.04.04
Пароль в 98-м винде!


14-1078689492
***ghost***
2004-03-07 22:58
2004.04.04
Червь.


1-1079614201
WebErr
2004-03-18 15:50
2004.04.04
SystemBorder := false ==> Big trouble!!!


1-1079076501
pasha_golub
2004-03-12 10:28
2004.04.04
Не могу поймать WM_MOUSELEAVE