Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизПередача сессии извне Найти похожие ветки
← →
Внук © (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c