Невозможно создать ADODB.Connection со сложной цепью программирования - PullRequest
0 голосов
/ 25 августа 2010

Хорошо, так что это действительно сложная проблема, я постараюсь объяснить все возможное.

У нас есть приложение на c ++, которое взаимодействует с Sql Connection следующим образом:

CoCreateInstance(_T("ADODB.Connection"))

Это отлично работает.

Недавно мы превратили весь наш внутренний код в объект Com. Если я напишу программу Vb для загрузки нашего объекта Com и выполню некоторые операции с базой данных, все будет нормально, CoCreateInstance(_T("ADODB.Connection"))
все еще работает.

Мы используем фитнес для тестирования, поэтому я написал приспособление, которое:
1) Принимает строку ввода vb-кода на html-страницу.
2) компилирует код vb
3) запускает код vb, который использует наш объект Com.
* fitnesse - это Java-приложение, поэтому путь к коду проходит и через Java.

Теперь, когда любая операция касается базы данных, объект Com попадает в исключение. Использует окна сообщений и удаление кода. Я сузил проблему до этой строки кода:

CoCreateInstance(_T("ADODB.Connection"))

обычно код возврата равен 0, но с этой цепочкой кода, вызывающего код, я получаю код возврата: 800401F3, который говорит, что он не может найти объект для загрузки.

Я дергаю себя за волосы, пытаясь понять, что происходит. Любая проницательность будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

Он сообщает, что не может найти ProgId в реестре. Это не очень полезно, это довольно стандартный компонент при любой установке Windows. Проверьте это, запустите regedit.exe и перейдите к HKLM \ Software \ Classes \ ADODB.Connection

Если этого не хватает, вам нужно установить провайдеры dbase на этом компьютере. Загрузите установщик MDAC 2.8 от Microsoft и запустите его. Если это не так, то у вас есть более загадочная проблема, возможно, что-то связанное с тем, что это 64-битная операционная система. Посмотрите в HKLM \ Software \ Wow6432Node тогда. Получите дополнительную диагностику, используя инструмент ProcMon от SysInternals, чтобы увидеть, что он ищет в реестре.

1 голос
/ 25 августа 2010

В качестве альтернативы вы не говорите, является ли ваш com "объект" .dll. Если это так, убедитесь, что это либо «саморегистрация», либо вам нужно будет запустить это в командной строке.

regsvr32 myobject.dll

Если это исполняемый файл с COM-объектами, зарегистрируйте объекты, запустив программу с параметром командной строки "/ RegServer", например так:

myobject.exe /RegServer

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...