C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сжатие базы
** Oper01
Отправлено: 24.11.2004, 22:13


Не зарегистрирован







Долго искал как сжать БД Access, не получалось сначала, но потом — о чудо, всё свершилось. База вместо 2,5 Мб стала занимать 400 Кб. Счатья были полные штаны, но не долго........ При открытии сжатой быза вылетает ошибка "Unrecognized format", в общем при сжатии что-то с базой происходит, что потом Access не может её открыть. Может перед открытием нужна ещё какая-нибудь процедура вроде обратного действия по отношению к сжатию базы ? Разъясните пожалуйста, хочу разобраться и закрыть для себя эту тему.
AVC
Отправлено: 25.11.2004, 09:13


Ветеран

Группа: Модератор
Сообщений: 1583



Попробовал у себя. Результаты такие:
Win 2000, Office2000
До сжатия 248к
После сжатия 170к
При открытии сказал что база в старом формате и попросил преобразовать.
После преобразования 180к

Еще один камушек в "пользу" Access'а biggrin.gif
Valdemar
Отправлено: 25.11.2004, 09:20


Мастер участка

Группа: Участник
Сообщений: 433



Я делал упаковку так, и никаких проблем потом не возникало (база была сделана в Access2000)
CODE
   AnsiString path=ExtractFilePath(Application->ExeName);
   if (!DirectoryExists(path+"backup"))
   {
       CreateDir(path+"backup");
   }
   AnsiString con_str=ADOConnection1->ConnectionString;
   ADOConnection1->Connected=false;
   ADOConnection1->ConnectionString="";
   CopyFile((path+"base.mdb").c_str(),(path+"backup\base.mdb").c_str(),false);
   Variant JetEng;
   JetEng = CreateOleObject("JRO.JetEngine");
   WideString InputDB = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+"base.mdb;Jet OLEDB:Database Password=1111";
   WideString OutputDB = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+path+"base1.mdb;Jet OLEDB:Database Password=1111";
   JetEng.OleFunction("CompactDatabase",InputDB,OutputDB);
   JetEng = Unassigned;
   CopyFile((path+"base1.mdb").c_str(),(path+"base.mdb").c_str(),false);
   DeleteFile(path+"base1.mdb");
   ADOConnection1->ConnectionString=con_str;
   ADOConnection1->Connected=true;
   Table->Open();

Вернуться в Работа с базами данных в C++Builder