none
Ошибка JRO.JetEngine RRS feed

  • Вопрос

  • Здравствуйте. Работаю с базой данных. Использовал провайдера Microsoft.Jet.OLEDB.4.0 для подключения к базе. Сейчас перешел на Мicrosoft Access 2010 Database Engine и использую строку Microsoft.Jet.OLEDB.12.0

    Ранее при сжатии базы данных использовал JRO

     Dim jro As New JRO.JetEngine
                jro.CompactDatabase("Provider=Microsoft.Jet.OLEDB.12.0;Data Source=DB.s;Jet OLEDB:Engine Type=5",                                "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=_DB.s;Jet OLEDB:Engine Type=5")

    Но теперь на строчке 

     Dim jro As New JRO.JetEngine

    выдает исключение

    Не удалось получить фабрику класса COM для компонента с CLSID {DE88C160-FF2C-11D1-BB6F-00C04FAE22DA} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    Я так понял в ссылках проекта не указана какая-то COM библиотека?

    25 июня 2019 г. 21:37

Ответы

  • А нет случайно JRO.JetEngine для 64 разрядных систем? ))))

    Случайно нет, объекты ведь сами себя случайно не компилируют и не регистрирует. В те далекие времена 64 битных систем просто не было, вот и объекта не существует.

    И даже если бы и был, то почему вы решили что он будет работать с новой версией базы? Опять же всегда можно попробовать скомпилировав приложение в 32 бит.

    Я вам настоятельно рекомендую переходить на современную базу данных (их много всяких разных, от SQL Localdb до SQLite) и избежать всех этих ужасов. 

    Если вам ну очень надо то можно посмотреть в сторону таинственного интерфейса IJetCompact:

    https://msdn.microsoft.com/en-us/windows/ms709627%28v=vs.80%29



    This posting is provided "AS IS" with no warranties, and confers no rights.

    26 июня 2019 г. 16:45
    Модератор
  • Можно завернуть этот функционал в отдельное 32-разрядное консольное приложение и вызывать его из WPF. Если вас интересует только сжатие, то даже особого механизма IPC делать не надо, достаточно вызывать из командной строки. 

    26 июня 2019 г. 16:40

Все ответы

  • "Я так понял в ссылках проекта не указана какая-то COM библиотека?"

    Нет, причина в другом. JRO.JetEngine (как и многие другие COM API времен Windows 2000) существует только в 32-разрядном исполнении. Вы же пытаетесь обратиться к нему из 64-разрядного приложения, и его не находит. Какая тут связь с Access 2010 Database Engine, я пока не понял. JRO - это, насколько я понимаю, библиотека именно старого Jet.

    26 июня 2019 г. 8:12
  • Печаль беда... А какие способы сжатия баз данных есть, которые будут работать в 64-разрядном приложении?

    >> Какая тут связь с Access 2010 Database Engine, я пока не понял

    Просто я предполагал, что библиотека Jet идет в комплекте с Access Database Engine, поэтому при переходе со старой версии перестала работать

    26 июня 2019 г. 9:51
  • Даже наверно вопрос по другому поставлю. Мне нужно после удаления всех записей с базы обнулить счетчик. Это реально сделать каким либо другим способом?
    26 июня 2019 г. 12:30
  • Еще вопрос. Если я ключевое поле сделаю не счетчиком, то после удаления записей размер базы будет уменьшаться? Или все равно нужно будет периодически делать сжатие базы посредством ACCESS
    26 июня 2019 г. 13:26
  • "А какие способы сжатия баз данных есть, которые будут работать в 64-разрядном приложении?"

    Вот это может быть: https://docs.microsoft.com/ru-ru/office/client-developer/access/desktop-database-reference/dbengine-compactdatabase-method-dao ?

    "Мне нужно после удаления всех записей с базы обнулить счетчик. Это реально сделать каким либо другим способом?"

    Под счетчиком вы понимаете поле с автоинкрементом? Как вариант - пересоздать таблицы заново. 

    По остальному - даже не знаю. Размер БД вряд ли напрямую связан со счетчиками. Как ведет себя размер БД при различных операциях, проще всего, я думаю, проверить экспериментально.


    • Изменено VadimTagil 26 июня 2019 г. 14:22
    26 июня 2019 г. 14:22
  • DAO к сожалению не годится. Я использую WPF (VB.net). Там этот способ не работает. И через JRO тоже теперь никак. Так как 64x
    26 июня 2019 г. 15:43
  • А нет случайно JRO.JetEngine для 64 разрядных систем? ))))
    26 июня 2019 г. 15:50
  • Можно завернуть этот функционал в отдельное 32-разрядное консольное приложение и вызывать его из WPF. Если вас интересует только сжатие, то даже особого механизма IPC делать не надо, достаточно вызывать из командной строки. 

    26 июня 2019 г. 16:40
  • А нет случайно JRO.JetEngine для 64 разрядных систем? ))))

    Случайно нет, объекты ведь сами себя случайно не компилируют и не регистрирует. В те далекие времена 64 битных систем просто не было, вот и объекта не существует.

    И даже если бы и был, то почему вы решили что он будет работать с новой версией базы? Опять же всегда можно попробовать скомпилировав приложение в 32 бит.

    Я вам настоятельно рекомендую переходить на современную базу данных (их много всяких разных, от SQL Localdb до SQLite) и избежать всех этих ужасов. 

    Если вам ну очень надо то можно посмотреть в сторону таинственного интерфейса IJetCompact:

    https://msdn.microsoft.com/en-us/windows/ms709627%28v=vs.80%29



    This posting is provided "AS IS" with no warranties, and confers no rights.

    26 июня 2019 г. 16:45
    Модератор
  • Стоит ли переход того, если я сейчас использую в качестве базы ACCESS 2010?
    26 июня 2019 г. 17:20
  • Стоит ли переход того, если я сейчас использую в качестве базы ACCESS 2010?

    Ну это вам решать. Возможно вам будет полезно знать что данный продукт снимается с поддержки в октябре 2020 года.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    26 июня 2019 г. 23:58
    Модератор