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

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

ADO [D6, MSAccess]


BAYES ©   (2004-03-10 10:28:00) 

Привет!
Возник вопрос по сжатию(упаковки) *.mdb, а то что-то БД жутко разростаеться.
Поискал на других форумах, многие советуют создавать новый *.mdb и копировать туда данные. Imho это бред.
Может есть что-то вроде PackTable, но только для *.mdb???


sniknik   (2004-03-10 13:52:00) [1]

> Немного для себя упрастил.
вот это забыл
je:= Null;
а оно очень желательно (если больше с обьектом работать не будеш надо завершить), у меня оно даже в finally вынесено (отработает даже если выше случится глюк, делай так же).

про переименовку вроде уже прояснили, у меня в один каталг т.к. имя новое задается NewBase$$$.Mdb (то которого у меня точно не зададут,  в принципе можно любое даже $$$.$$$) после переименовывается, а в тот же самый файл не пакуется файлы должны физически разными быть (нельзя новое и старое имя одно и тоже).


VLAD-MAL   (2004-03-10 12:54:00) [2]

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


SPIRIT   (2004-03-10 12:48:00) [3]

Сжимает в новый
удаляет старый
переименовывает новый в старый..
делай также

DeleteFile('c:\data\db.mdb');
RenameFile('c:\data\1\db.mdb', 'c:\data\db.mdb');


BAYES   (2004-03-10 12:43:00) [4]

Да, вопросы по принципу.

Немного для себя упрастил.
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+';');

Но это только если сжатие происходит в др. каталог.
В твоем коде как раз и предусматриваеться что бы сжатие происходило в одном каталоге. Но что-то не в силах высматреть его. Не затруднит тебя пояснить код?!


sniknik   (2004-03-10 12:05:00) [5]

> sniknik - твой код добавил больше вопросов чем ответов.
это из программы, "лишнее" убрать думаю не проблема.

не работает? то что? или просто вопросы по "принципу", ну так спрашивай.


BAYES   (2004-03-10 11:48:00) [6]

Пасиба, но я это(MSAccess) все знаю, мне как говориться программно. Вот разбираюсь с многоуважаемым sniknik.
sniknik - твой код добавил больше вопросов чем ответов.


YurikGl   (2004-03-10 11:19:00) [7]

А еще там есть галочка,"сжимать базу при закрытии"


sniknik   (2004-03-10 10:34:00) [8]

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;


Я   (2004-03-10 10:31:00) [9]

1. Самое простое- воспользоваться MS Access (монопольно). Сервис - Служебные программы - Сжать и восстановить базу данных.
2. DAO


Наверх

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