Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Передача сессии извне   Найти похожие ветки 

 
Внук ©   (2004-03-24 13:52) [0]

Начальные условия таковы: есть приложение на Visual FoxPro, подключающееся к БД Oracle через ODBC (функции SQLCONNECT, SQLEXECUTE и т.д.). Есть COM-объект, написанный на Delphi  с использованием DOA. Этот объект выполняет некоторые служебные функции в той же БД, но не должен создавать собственную сессию. Внимание, вопрос :) Как передать сессию Oracle из host-программы, чтобы с ней можно было работать через TOracleSession в COM-объекте?
Выслушаю любые идеи.


 
Polevi ©   (2004-03-24 15:02) [1]

DOA использует ODBC ?


 
Vlad ©   (2004-03-24 15:04) [2]

Нет, не использует. DOA - это Direct Oracle Access


 
Polevi ©   (2004-03-24 15:07) [3]

и скорее всего DOA никчему handle, который возвратила SQLConnect


 
Внук ©   (2004-03-24 15:09) [4]

>>Polevi ©   (24.03.04 15:07) [3]
 Угу, в том и беда...


 
Polevi ©   (2004-03-24 15:11) [5]

переписать COM объект под ODBC аналог DOA, другого варианта я не вижу


 
Внук ©   (2004-03-24 15:46) [6]

>>Polevi ©   (24.03.04 15:11) [5]
 Дело в том, что эта host-программа не единственная, есть и другие, в том числе, написанные на Delphi. И все пользуются разными способами доступа к данным. А COM должен быть один на всех.


 
Polevi ©   (2004-03-24 15:59) [7]

значит COM должен возвращать различную реализацию некого интерфейса в зависимости от типа соединения


 
Внук ©   (2004-03-24 16:12) [8]

Это очень-очень грустно. Вообще-то хотелось бы выделять handle оракловой сессии в каждом типе соединения и передавать его в COM. Ведь должен же этот handle присутствовать где-то. Попробую еще покопать в этом направлении. А за идею спасибо.


 
Парад У.   (2004-03-25 13:39) [9]

Он присутствует вот здесь:

sys.DBMS_SESSION.unique_session_id


 
Petr V. Abramov ©   (2004-03-25 14:07) [10]

Внук ©   (24.03.04 16:12) [8]
 "handle оракловой сессии" - это, как минимум, Environment Handle, Error Handle и Service Context Handle, и все они друг на друга завязаны. Достать их можно - они находятся в protected секции TOracleSession (DOA). Но вот куда-то наружу их передавать, IMHO, уже гораздо грустнее


 
Внук ©   (2004-03-25 14:14) [11]

>>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:21) [12]

> Внук ©   (25.03.04 14:14) [11]
 LDA - это из API Oracle 7, которое с 9-ки не поддерживается. (по крайней мере, ф-ции OCILDAToSvcCtx, которой можно было выйти в режим совместимости с 7-ным API, я не нашел. Может, конечно, плохо искал, но все равно от него скоро откажутся).
 Для выполнения запросов достаточно Service Context Handle и Error Handle. А, чтоб получить Service Context, нужен Env. Handle.


 
Petr V. Abramov ©   (2004-03-25 14:46) [13]

В DOA есть специальный нехилый кусок кода для настройки себя для работы с полученным извне ServiceContext или LDA. Поэтому между версиями DOA у Вас это получилось. Заточено ли под это ODBC - большой вопрос, причем скорее всего, с ответом "нет"


 
Внук ©   (2004-03-25 15:09) [14]

Вот в этом и дело. Но ведь ODBC с Oracle-ом работает, значит где-то она эти handles хранит. Надо бы найти и отнять :)) Буду искать дальше.


 
Petr V. Abramov ©   (2004-03-25 15:15) [15]

Найти и отнять, :) может и можно.
Кстати, в BDE было что-то типа DbiGetProp/DbiSetProp, через которое можно было (теоретически) достать LDA. Может, и у ODBC че-нить такое есть. Но вот то что ODBC можно заставить само работать с чужими handle`ами - совсем с трудом верится. :)


 
Внук ©   (2004-03-25 15:22) [16]

>>Но вот то что ODBC можно заставить само работать с чужими handle`ами
А этого не надо, надо как раз наоборот. Попробую SQLGETPROP подергать...



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
4-1077406924
OverSet
2004-02-22 02:42
2004.04.25
Перемещение заголовка окна


9-1066578502
vitalick
2003-10-19 19:48
2004.04.25
Книги


1-1081284353
Yanis
2004-04-07 00:45
2004.04.25
Файлы, файлы.


1-1081348339
RainKM
2004-04-07 18:32
2004.04.25
Компоненти для создания проги типа Експлорер!!!!!


14-1080798809
gn
2004-04-01 09:53
2004.04.25
Формат MP3 объявлен вне закона