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

 
ole: сжатие бд access
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



А какие заголовочные файлы надо подключать ? Компилятор ругается.

Вернуться в Вопросы программирования в C++Builder