Лучший отвечающий
Ошибка JRO.JetEngine

Вопрос
-
Здравствуйте. Работаю с базой данных. Использовал провайдера 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.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 июня 2019 г. 8:34
26 июня 2019 г. 16:45Модератор -
Можно завернуть этот функционал в отдельное 32-разрядное консольное приложение и вызывать его из WPF. Если вас интересует только сжатие, то даже особого механизма IPC делать не надо, достаточно вызывать из командной строки.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 июня 2019 г. 8:34
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
-
Еще вопрос. Если я ключевое поле сделаю не счетчиком, то после удаления записей размер базы будет уменьшаться? Или все равно нужно будет периодически делать сжатие базы посредством ACCESS26 июня 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 тоже теперь никак. Так как 64x26 июня 2019 г. 15:43
-
А нет случайно JRO.JetEngine для 64 разрядных систем? ))))26 июня 2019 г. 15:50
-
Можно завернуть этот функционал в отдельное 32-разрядное консольное приложение и вызывать его из WPF. Если вас интересует только сжатие, то даже особого механизма IPC делать не надо, достаточно вызывать из командной строки.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 июня 2019 г. 8:34
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.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 27 июня 2019 г. 8:34
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Модератор