Владимир_ |
Отправлено: 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
|
Так лучше выложить здесь, на форуме, многим будет интересно
(можно через "Присоеденить файл")
|
|