Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.029 c
14-1081071735
Black_phoenix
2004-04-04 13:42
2004.04.25
Программы для клубов с открытым исходным кодом


1-1081158835
Checist [root]
2004-04-05 13:53
2004.04.25
Добавление события


4-1077785537
@ac
2004-02-26 11:52
2004.04.25
Как закрыть какое-либо стороннее приложение, зная его имя и папку


7-1077457486
HydraMarat
2004-02-22 16:44
2004.04.25
Распознавание текста


14-1081173877
}|{yk
2004-04-05 18:04
2004.04.25
Дейкстра Структурное програмирование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский