Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Программное сжатие БД Access


Автор: SelfDestructor 17.2.2003, 22:02
На C++ Builder пробую следующий код, раздобытый где-то

Код

 Variant je = CreateOleObject("JRO.JetEngine");
 je.OleFunction("CompactDatabase",
       "Provider  = Microsoft.Jet.OLEDB.4.0;\
       Data Source = armtest.mdb\
       Provider = Microsoft.Jet.OLEDB.4.0;\
       Data Source = Compressed.mdb;\
       Jet OLEDB:Encrypt Database = True");
 RenameFile("Compressed.mdb", "armtest.mdb");
 Dm->ADOConnection1->Open();


на второй строчке валится с сообщением "недопустимое число параметров"
подскажите, в чем ошибка?

может кто подскажет альтернативный вариант сжатия или ссылку где можно почитать как это сделать - буду признателен =))

Автор: Vit 18.2.2003, 00:21
Скачай компоненты kaDAO - есть на www.torry.net, это пакет для Дельфи, но думаю на билдер должны стать, там есть эта функция.

Автор: SelfDestructor 18.2.2003, 02:11
По возможности хотелось бы избежать дополнительных компонент.

Автор: Vit 18.2.2003, 03:44
Тогда точно скажу - используй DAO, иначе никак. Если не знаешь как, то скачай компонент и посмотри как они это делают.

Автор: SelfDestructor 18.2.2003, 19:36
Хорошо, тогда такой вопрос, пока идет не быстрый процесс скачивания, будет ли предложенный тобой способ работать на машине, где MS Access не установлен? - мне в принципе это и надо =))

Автор: Medved 18.2.2003, 22:46
Цитата(SelfDestructor @ 18.2.2003, 01:02)
На C++ Builder пробую следующий код, раздобытый где-то

Код

 Variant je = CreateOleObject("JRO.JetEngine");
 je.OleFunction("CompactDatabase",
       "Provider  = Microsoft.Jet.OLEDB.4.0;\
       Data Source = armtest.mdb\
       Provider = Microsoft.Jet.OLEDB.4.0;\
       Data Source = Compressed.mdb;\
       Jet OLEDB:Encrypt Database = True");
 RenameFile("Compressed.mdb", "armtest.mdb");
 Dm->ADOConnection1->Open();


на второй строчке валится с сообщением "недопустимое число параметров"
подскажите, в чем ошибка?

может кто подскажет альтернативный вариант сжатия или ссылку где можно почитать как это сделать - буду признателен =))

А ты попробуй je.OleFunction не разбивать на несколько строчек, а это все сделать в одной.

Автор: SelfDestructor 18.2.2003, 23:12
Попробовал, хотя заранее был уверен, что это ничего не даст.
Зато обнаружил, что после armtest.mdb точку с запятой забыл - но это тоже ничего не дало =))))

Из исходников каДАО выковырять нужное место пока затруднительно. Трудность в правильной иннициаллизации объекта CoreDBEngine, который замучался выцеплять =)).

Ну не верится, что без ДАО не обойтись!

Автор: Vit 19.2.2003, 00:49
Установка MS Access необязательна - достаточно зарегистрированной DAO3x.dll - все интерфейсы зашиты в ней. Можешь не верить что можно сделать без DAO - скорее всего можно, но MS обеспечивает полный контроль над работой с MS Access только через DAO . Конечно если найти из исходники или декомпильнуть эту DLL то скорее всего достучаться можно, но это крайне трудоёмко. Можно пойти таким способом- экспортировать все интерфейсы из DAO3x.dll и самому разобраться какой интерфейс работает и какой метод использовать. Если вы знакомы с COM технологией то скорее всего у вас не должно возникнуть затруднений.


PS. DAO3x.dll означает одну из следующих dll в зависимости от версии офиса: DAO30.dll, DAO35.dll, DAO36.dll

Автор: SelfDestructor 19.2.2003, 23:29
Хм, хорошо, Vit, спасибо! Надо еще проверить: входит ли dao3x.dll в MDAC 2.5 например? Потому как оффис на машинах клиентов может не стоять, а МДАК мы в комплект поставки включаем...

Автор: Vit 20.2.2003, 00:03
Цитата(SelfDestructor @ 19.2.2003, 14:29)
Надо еще проверить: входит ли dao3x.dll

Нет проблем, поставляй DLL со своей программой, и если её нет то ставь свою и регистрируй как обычный AciveX - к счастью никаких дополнительных файлов и установок к этой DLL не требуется. Я её поставляю со своими программами без всяких проблем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)