![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача сессии извне [D5]
Внук © (2004-03-24 13:52:00)Начальные условия таковы: есть приложение на Visual FoxPro, подключающееся к БД Oracle через ODBC (функции SQLCONNECT, SQLEXECUTE и т.д.). Есть COM-объект, написанный на Delphi с использованием DOA. Этот объект выполняет некоторые служебные функции в той же БД, но не должен создавать собственную сессию. Внимание, вопрос :) Как передать сессию Oracle из host-программы, чтобы с ней можно было работать через TOracleSession в COM-объекте?
Выслушаю любые идеи.
Внук (2004-03-25 15:22:00) [1]>>Но вот то что ODBC можно заставить само работать с чужими handle`ами
А этого не надо, надо как раз наоборот. Попробую SQLGETPROP подергать...
Petr V. Abramov (2004-03-25 15:15:00) [2]Найти и отнять, :) может и можно.
Кстати, в BDE было что-то типа DbiGetProp/DbiSetProp, через которое можно было (теоретически) достать LDA. Может, и у ODBC че-нить такое есть. Но вот то что ODBC можно заставить само работать с чужими handle`ами - совсем с трудом верится. :)
Внук (2004-03-25 15:09:00) [3]Вот в этом и дело. Но ведь ODBC с Oracle-ом работает, значит где-то она эти handles хранит. Надо бы найти и отнять :)) Буду искать дальше.
Petr V. Abramov (2004-03-25 14:46:00) [4]В DOA есть специальный нехилый кусок кода для настройки себя для работы с полученным извне ServiceContext или LDA. Поэтому между версиями DOA у Вас это получилось. Заточено ли под это ODBC - большой вопрос, причем скорее всего, с ответом "нет"
Petr V. Abramov (2004-03-25 14:21:00) [5]> Внук © (25.03.04 14:14) [11]
LDA - это из API Oracle 7, которое с 9-ки не поддерживается. (по крайней мере, ф-ции OCILDAToSvcCtx, которой можно было выйти в режим совместимости с 7-ным API, я не нашел. Может, конечно, плохо искал, но все равно от него скоро откажутся).
Для выполнения запросов достаточно Service Context Handle и Error Handle. А, чтоб получить Service Context, нужен Env. Handle.
Внук (2004-03-25 14:14:00) [6]>>Petr V. Abramov © (25.03.04 14:07) [10]
>>Environment Handle, Error Handle и Service Context Handle
Ага, как минимум. Только для выполнения запросов достаточно какого-то одного, это можно в исходниках DOA память освежить.
Наружу передавать нужно LDA. У сессии есть ExternalLDA. Так что между Delphi-приложениями передавать можно (делая поправку на учет маршаллинга). А вот как из внутренностей ODBC получить этот LDA, это загадка пока.
Скажем так. Между версиями DOA для D4 и D5 это мне удалось. А вот между DOA и ODBC - нет.
Petr V. Abramov (2004-03-25 14:07:00) [7]Внук © (24.03.04 16:12) [8]
"handle оракловой сессии" - это, как минимум, Environment Handle, Error Handle и Service Context Handle, и все они друг на друга завязаны. Достать их можно - они находятся в protected секции TOracleSession (DOA). Но вот куда-то наружу их передавать, IMHO, уже гораздо грустнее
Парад У. (2004-03-25 13:39:00) [8]Он присутствует вот здесь:
sys.DBMS_SESSION.unique_session_id
Внук (2004-03-24 16:12:00) [9]Это очень-очень грустно. Вообще-то хотелось бы выделять handle оракловой сессии в каждом типе соединения и передавать его в COM. Ведь должен же этот handle присутствовать где-то. Попробую еще покопать в этом направлении. А за идею спасибо.
Polevi (2004-03-24 15:59:00) [10]значит COM должен возвращать различную реализацию некого интерфейса в зависимости от типа соединения
Внук (2004-03-24 15:46:00) [11]>>Polevi © (24.03.04 15:11) [5]
Дело в том, что эта host-программа не единственная, есть и другие, в том числе, написанные на Delphi. И все пользуются разными способами доступа к данным. А COM должен быть один на всех.
Polevi (2004-03-24 15:11:00) [12]переписать COM объект под ODBC аналог DOA, другого варианта я не вижу
Внук (2004-03-24 15:09:00) [13]>>Polevi © (24.03.04 15:07) [3]
Угу, в том и беда...
Polevi (2004-03-24 15:07:00) [14]и скорее всего DOA никчему handle, который возвратила SQLConnect
Vlad (2004-03-24 15:04:00) [15]Нет, не использует. DOA - это Direct Oracle Access
Polevi (2004-03-24 15:02:00) [16]DOA использует ODBC ?