|
Серьезная проблема с возвращением курсора через ADO
|
|||
---|---|---|---|
#18+
Господа программеры! Если коротко, то как через ADO-компоненты получить результат работы хранимой процедуры в виде КУРСОРА? А если развернуто, то ... Есть одна проблемка, весьма любопытная. Связана она с использованием компонентов ADO для работы с хранимой процедурой, возвращающей КУРСОР. Использование такой ХП в PL/SQL и в специализированных компонентах для Orqacle (типа ODAC) не вызывает никаких проблем. А вот с ADO проблема есть. Естественно, что доступ из ASP-скриптов и доступ через ADO компоненты Delphi и C++Builder дают одинаковые отрицательные результаты. Поэтому ограничимся только Delphi (все же RAD как-никак). Так вот беру я компоненту TADOStoredProc, подключаю ее к TADOSession, выбираю имя ХП, возвращаюшую курсор и устанавливаю свойство Active := true, то есть окрываю DataSet. Ну и тут вылезает ошибка типа "Выражение не верного типа", и ссылка в исходик на PL/SQL на строку описания типа, возвращаемого ХП. Смотрим дальше: открываю в компоненте TADOStoredProc свойство Parameters и, о ужас, параметр RETURN_VALUE имеет тип ftInterface, а не ftCursor, как мне казалось было бы логичным. Ну теперь понятно откуда взялось расхождение в типе. Дальше выставляю насильно тип ftCursor - компонента не дает. Глядим дальше. Покопавшись немного в исходниках ADO-компонент я нашел где происходит преобразование типов из VCL-компонентов в типы переменных собственно ADO. И что же мы видим? тип ftCursor передается в ADO, как Unknown (это не интерфейс IUnknown, а неизвестный тип)! Что же это получается: ADO не поддерживает КУРСОРЫ? Я лично в это не верю, а думаю о своей некомпетентности. PS. Ошибки, которые появляются при использовании ADO-компонентов на прямую (скажем из ASP-скрипта) точно такие же, как и в Delphi и в C++Builder. SOS! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2001, 11:33 |
|
Серьезная проблема с возвращением курсора через ADO
|
|||
---|---|---|---|
#18+
Господа, есть такой прикол. Сам я АДО не использую и работаю c DOA. может я неправильно понимаю вопрос. но если что, то ниже сказанное все-равно пригодится. Идея такая - хранимая возвращает набор записей в клиетн но не в виде курсора, а как переменную некоторого типа например. Курсор то надо иногда закрывать. а то он так и будет висеть не серваке открытым. ниже решение create type T1 as object ( A Integer, B Integer ); create type T2 as table of T1; теперь пишем хранимую function Rpt_Ord_Summary return T2 is obj T2 := T2(); begin obj.extend; obj(obj.count) := T1 ( 1, 2 ); -- A = 1, B = 2 return obj; end; теперь делаем выбор в клиенте таким образом с привидением select * from the ( select cast( Rpt_Ord_Summary as T2 ) from dual ) и все класс. с ВАС братва пузырь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2001, 10:01 |
|
Серьезная проблема с возвращением курсора через ADO
|
|||
---|---|---|---|
#18+
Смею заметить, что решение не элегантное и, к тому же, не удобное и притянутое за уши. По опыту могу сказать, что подобные решения ни к чему хорошему не приводят, особенно когда надо закругляться с проектом, а он вдруг начинает себя вести черт знает как. Тем не менее спасибо за фичу - погляжу, покавыряю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2001, 06:01 |
|
Серьезная проблема с возвращением курсора через ADO
|
|||
---|---|---|---|
#18+
Ну если это притянутое за уши тогда покажите плиз как выкачать таблицу из сервера не используя курсоры С курсорами то дополнительные проблемы с закрытием. ИЛИ Я ЧЕГО-ТО СИЛЬНО НЕ ПОНИМАЮ???????? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2001, 12:22 |
|
|
start [/forum/topic.php?fid=52&msg=32010977&tid=1993561]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 423ms |
0 / 0 |