Глюк или Ламерство (Подключение к Oracle DB) Need HELP!!!

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Я пытаюсь подклюснится к базе данных, используя стандартное выражение:
Dim O_Session As OraSessionClass
Dim O_Database As OraDatabase

Set O_Session = CreateObject("OracleInProcServer.XOraSession")
Set O_Database = O_Session.OpenDatabase("WDB", "wizard/wizard", 0&)

на что получаю:
Run-time error '91' Object variable or With block variable not set

Причем всё прекрасно работало, до переустановки Officе.
Help is NEEDED!!!!!!!!!!![/b]
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Переменная O_Session или O_Database однозначно оказалась неприсвоенной.
(Вы не указали на какой строке ошибка)
В первую очередь надо выяснить какая именно.

tnsping wdb проходит нормально?
другими средствами подключаться пробовали? (SQL+ом, например)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Извиняюсь, недочитал вопрос.

Кроме офиса еще что-нибудь переустанавливали?
Проверьте, класс OracleInProcServer.XOraSession в реестре зарегистрирован нормально, и по пути указанному в InprocServer указанная там DLL лежит?

А еще в редакторе VBA проверьте в Tools\References ссылка на вышеупомянутую библиотеку включена?
Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Naeel Maqsudov, "Проверьте, класс OracleInProcServer.XOraSession в реестре зарегистрирован нормально"

Как это можно проверить?
Ошыбка всплывает в последней строке прведенного кода (Set O_Database = O_Session.OpenDatabase("WDB", "wizard/wizard", 0&)). Неприсваевается переменная O_Session (на сколько я понимаю). Но как ето лечится не имею понятия. Ссылки проверял - указанны верно.
Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Народ!!! что вообше никаких идей в чем может быть проблема. Я думаю что это должно быть связано с настройками и подключением библиотек, но я совершенно не разбирабсь в VB и не знаю как это исправить...
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Дык, как проверить?! Ищите в реестре строку "OracleInProcServer.XOraSession", она будет по пути \HKEY_CLASSES_ROOT. В этом параметре вложено значение CLSID (для XOraSession.3 оно ={3893B4A0-FFD8-101A-ADF2-04021C007002}, например). Далее по пути \HKEY_CLASSES_ROOT\CLSID\{3893B4A0-FFD8-101A-ADF2-04021C007002} найдете параметр с вложенным значением InProcServer, указывающим на DLL. Проверьте также, на месте ли DLL. Если она переехала, зарегистрируйте ее коандой RegSvr32 oip8.dll (или как она там у Вас называется) (...хотя в такой ситуации речь видимо будет идни о переустановке клиентской части Oracle)

Если эта проверка ничего не выявит - все окажется верно - то значит самой используемой библиотеке чего-то не хватает. Т.е. сама oip8(9).dll работает - виновата клиентская часть oracle. Посмотрите в переменной окружения Path прописаны ли пути в папку BIN клиентской части.
Неприсваевается переменная O_Session (на сколько я понимаю).
Поставьте на строке Set O_Session = ... точку останова, или просто пройдите этот макрос по шагам. После выполнения этой строки наведите курсор на переменную O_Session и увидите точно (можно также добавить ).

Если окажется, что все-таки O_Session создается, то надо проверять подключение к базе. Попробуйте подключиться c помощью SQL+. Проверьте, во всех ли нужных местах лежат файлы tnsnames.ora с нужным содержанием.
Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Naeel Maqsudov, спасибо за помошь. Пришлось переустоновить всю систему, но он заработал. Это просто Oracle категорически меня не выносит :)
Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Вы будете смеятся, а я буду плакать!!! :( Он опять не пашет и я понятия не имею почему. На этот раз я ничего не менял, как вчера заработала, так сегодня перестала :( :( :(
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Скоро как раз Новый год.
Попросите у Деда мороза в подарок настоящий большой шаманский бубен. :)
Пляски с бубном в нашем деле очень помогают. Даже лучше иногда чем установка драйвера HANDS.SYS :)
------------
1) Ошибка возникает в том же месте или нет?
2) А жив ли сервер?
3) Еще раз проверьте все что было посоветовано ранее.
4) Проверьте наличие в Path путей в папку bin клиентской части Oracle.
5) Проверьте наличие во всех нужных местах и правильное содержание файлов tnsnames.ora и sqlnet.ora.

Больше ничего не может быть в принципе.
Все остальное - это шаманство, и тут без бубна уже никак не решить.
Wizard
Сообщения: 9
Зарегистрирован: 10 дек 2005, 13:36
Откуда: Riga, Latvia

Я в Oracle не силен, вообше не разбираюсь в том что касается администрирывания.
По пунктам:
1. Ошибка та же;
2. Сервер в порядке - SQL+ работает нормально;
3. Реестр и DLL тоже на месте;
4. Чесно говоря, понятия не имею где это можно посмотреть и выставить.
5.SQLNET.ORA выглядит пустоватым по сравнению с Sample (но я не знаю мож он такой и должен быть)
# SQLNET.ORA Network Configuration File: E:\oracle\ora81\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

TNSNAMES.ORA вроде впарядке

# TNSNAMES.ORA Network Configuration File: E:\oracle\ora81\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

WDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wmw)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = WDB)
)
)

WBASE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wmw)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = WBASE)
)
)

INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wmw)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = WBASE)
(PRESENTATION = http://admin)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
Ответить