WideString WSCurrConn = ADOConnection1->ConnectionString;
Variant JE = Variant::CreateObject("JRO.JetEngine");
try{
TAutoArgs<2> args;
args[1] = WSCurrConn;
args[2] = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\tmp\\myTmp.mdb";
HRESULT hRes = JE.OleFunction("CompactDatabase",static_cast<TAutoArgsBase*>(&args));
}
catch(Exception& ex){
ShowMessage("Error: "+ ex.Message);
}
Сжатие базы ACCESS
Поиск по форуму не помог, неужели я первый озадачился такой вещью. Есть в программе MS ACCESS такая команда "сжать базу данных", это когда очищаются все удаленные когда-то записи (ведь физически они из файла не удаляются) и тд. При этом размер файла базы данных соответственно уменьшается.
Можно ли, используя ADO, осуществить данную операцию из моей программы?
Цитата: Borgir
День добрый!
Поиск по форуму не помог, неужели я первый озадачился такой вещью. Есть в программе MS ACCESS такая команда "сжать базу данных", это когда очищаются все удаленные когда-то записи (ведь физически они из файла не удаляются) и тд. При этом размер файла базы данных соответственно уменьшается.
Можно ли, используя ADO, осуществить данную операцию из моей программы?
Поиск по форуму не помог, неужели я первый озадачился такой вещью. Есть в программе MS ACCESS такая команда "сжать базу данных", это когда очищаются все удаленные когда-то записи (ведь физически они из файла не удаляются) и тд. При этом размер файла базы данных соответственно уменьшается.
Можно ли, используя ADO, осуществить данную операцию из моей программы?
прикинь ты ПЕРВЫЙ. не считая той тысячи человек которые задавали вопрос до тебя. :)
Код:
соответственно заменяешь файл базы данных тем который находится в c:\\tmp\\myTmp.mdb - надеюсь это понятно.
//
args[2] = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\tmp\\myTmp.mdb";
[/quote]
Вопрос, если в строке ConnectionString уже указан путь к БД, то зачем в строке Provider нужен параметр Source?
Цитата: el scorpio
Вопрос, если в строке ConnectionString уже указан путь к БД, то зачем в строке Provider нужен параметр Source?
метод CompactDatabase требует передачи как минимум двух параметров - исходной базы и итоговой базы. так же туда можно передать кодировку и пароль.
после сжатия итоговой базой заменяешь исходную.
Меня эта возможность очень обрадовала, но...
Цитата: kot_
Код:
...
HRESULT hRes = JE.OleFunction("CompactDatabase",static_cast<TAutoArgsBase*>(&args));
...
HRESULT hRes = JE.OleFunction("CompactDatabase",static_cast<TAutoArgsBase*>(&args));
...
На этой строке выскакивает исключение "... EOleSysError with message 'Ошибка'. ..." без собственно текста ошибки
Может что-то еще нужно сделать?
Спасибо!