Tatiana |
Отправлено: 06.05.2006, 10:02 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
CODE | void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString paths= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:.mdb";
AnsiString pathd= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:.mdb";
Variant V;
V = CreateOleObject("JRO.JetEngine");
V.OleFunction("CompactDatabase", paths.c_str(), pathd.c_str());
}
//---------------------------------------------------------------------------
|
База ломается. Метод CompactDatabase из другой бд access работает нормально. Что делать? (База в формате 97) [CODE] |
|
Valdemar |
Отправлено: 06.05.2006, 10:20 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Data Source=E:.mdb — что-то я не понял эту конструкцию.
Попробуйте использовать в качестве приемника не исходный файл БД, а другой. А потом заменять старый файл новым.
Если сделаете поиск по CompactDatabase, то найдете примеры. |
|
Tatiana |
Отправлено: 06.05.2006, 10:26 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Извините, опечатка
[CODE]void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString paths= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\1.mdb";
AnsiString pathd= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\2.mdb";
Variant V;
V = CreateOleObject("JRO.JetEngine");
V.OleFunction("CompactDatabase", paths.c_str(), pathd.c_str()) ;
}
//---------------------------------------------------------------------------
[CODE] |
|
Tatiana |
Отправлено: 10.05.2006, 09:21 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Выяснила вот что: В системе 2 оффиса: 97 и 2002. Так вот файлы 2002 и 2000 сжимаются с помощью этого кода нормально, а вот 97 — ломаются. Может, где — то нужно указать, что это именно формат 97? |
|
Oper01 |
Отправлено: 10.05.2006, 10:36 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
У меня была такая же проблема с 97 Access'ом. После сжатия база перестаёт открываться. Я так и не нашёл решения этой задачи, хотя стоит она до сих пор, но не очень остро. |
|
Tatiana |
Отправлено: 10.05.2006, 12:56 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Посоветовали jet 3.51, но на Provider=Microsoft.Jet.OLEDB.3.51 — выдается соообщение "Ошибка". В реестре нашла только office/10.0/acccess/jet/4.0, хотя при установке компонентов 97 драйверы отмечены и в system32 имеется файл msjet35.dll. Удалила и заново установила драйверы — не помогло |
|
Tatiana |
Отправлено: 12.05.2006, 04:42 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
нашла решение через DAO:
WideString paths, pathd;
................
Variant V;
V=CreateOleObject("Access.Application");
V.OlePropertyGet("DBEngine").OleFunction("CompactDatabase", paths, pathd);
|
|
Oper01 |
Отправлено: 12.05.2006, 11:06 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 145
|
А какие заголовочные файлы надо подключать ? Компилятор ругается. |
|