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

 
Сжатие базы данных Access
Владимир_
Отправлено: 27.10.2003, 18:55


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







Поработал с базой данных Access — создавал/удалял таблицы,
добавлял/удалял записи. Потом удалил все записи в таблицах.
Размер файла базы данных около 2-х мегабайт!
Подскажите как программно можно ее сжать?
SQL-команду OPTIMIZE TABLE table не понимает.
Что-то ведь должно быть для базы данных?
Admin
Отправлено: 28.10.2003, 18:43


Владимир

Группа: Администратор
Сообщений: 1190



В FAQ было:

54> Как сжать mdb файл из пpогpаммы?

CODE

Если pаботаешь чеpез ADO, то можно pyками. WSCurrConn должна быть
ConnectionString текyщего TADOConnection, WSTempDB — пyть к
вpеменной базе.
Потом пеpеименовываешь вpеменнyю в текyщyю и все. Hy есессно y
пользователя должны быть пpава и на момент сжатия всех надо
отключить.

WideString WSCurrConn, WSTempDB;
Variant JE = Variant::CreateObject ("JRO.JetEngine");
try
{
HRESULT hResult = JE.OleFunction ("CompactDatabase",  WSCurrConn,
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + WSTempDB);
}
__finally
{

JE = Unassigned;
}


Владимир_
Отправлено: 28.10.2003, 20:12


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







Ничего не получается. Появляется окно, в котором написано "Ошибка".
У меня строка подключения такая:
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=db_1;Extended Properties="DSN=db_1;DBQ=C:\DATA\baza;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;";Initial Catalog=C:\DATA\baza";
Владимир_
  Отправлено: 01.11.2003, 22:06


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







QUOTE (Владимир_ @ 28/10/2003, 21:14)
Ничего не получается. Появляется окно, в котором написано "Ошибка".
У меня строка подключения такая:
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=db_1;Extended Properties="DSN=db_1;DBQ=C:\DATA\baza;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;";Initial Catalog=C:\DATA\baza";

Неужели никто помочь не может???
Admin
Отправлено: 02.11.2003, 12:46


Владимир

Группа: Администратор
Сообщений: 1190



А у меня работает.
Есть например учебная база bcdemos.mdb и надо ее сжать.
"C:\Program Files\Common Files\Borland Shared\Data\bcdemos.mdb"

В ADOConnection1 ConnectionString получился следующий
(выбираем провайдера !!! — Microsoft Jet 4.0 OLE DB
- а у Вас я так понимаю стоит MSDASQL.1)

CODE

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Common Files\Borland Shared\Data\bcdemos.mdb;Mode=Share Deny Read|Share Deny Write;Extended Properties="";Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False


По нажатию кнопки сжимаем базу:

CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString WSCurrConn = ADOConnection1->ConnectionString;

Variant JE = Variant::CreateObject("JRO.JetEngine");
   try{
try{
TAutoArgs<2> args;
args[1] = WSCurrConn;
args[2] = "Provider=Microsoft.Jet.OLEDB.4.0;"
                       "Data Source=c:\\---\\myTmp.mdb";
HRESULT hRes = JE.OleFunction("CompactDatabase",
static_cast<TAutoArgsBase*>(&args));
}
catch(Exception& ex){
ShowMessage("Error: "+ex.Message);
}}
     __finally{ JE = Unassigned;
    }
}


Сжатая база с именем myTmp.mdb появляется
в папке "с:\---"

Отредактировано Admin — 02/11/2003, 13:56
Владимир_
Отправлено: 03.11.2003, 10:32


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







СПАСИБО!
У меня просто пока нет документации по Access и OLE.
И интернете ничего пока не нашел.
Может кто подскажет ссылочки?
LeeMouse
Отправлено: 03.11.2003, 11:35


Дежурный стрелочник

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



В одном из моих проектов есть программное сжатие БД Access2000. Делается через COM — интерфейс к DAO 3.6
Исходников под рукой нет, если интересно могу намылить leemouse@mail.ru
Admin
Отправлено: 04.11.2003, 11:37


Владимир

Группа: Администратор
Сообщений: 1190



Так лучше выложить здесь, на форуме, многим будет интересно
(можно через "Присоеденить файл")

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