** 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'а |
|
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(); | |
|
|