powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Серьезная проблема с возвращением курсора через ADO
4 сообщений из 4, страница 1 из 1
Серьезная проблема с возвращением курсора через ADO
    #32010977
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа программеры!

Если коротко, то как через 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!
...
Рейтинг: 0 / 0
Серьезная проблема с возвращением курсора через ADO
    #32011362
maski_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, есть такой прикол. Сам я АДО не использую и работаю 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 )
и все класс.

с ВАС братва пузырь
...
Рейтинг: 0 / 0
Серьезная проблема с возвращением курсора через ADO
    #32011550
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смею заметить, что решение не элегантное и, к тому же, не удобное и притянутое за уши. По опыту могу сказать, что подобные решения ни к чему хорошему не приводят, особенно когда надо закругляться с проектом, а он вдруг начинает себя вести черт знает как.
Тем не менее спасибо за фичу - погляжу, покавыряю.
...
Рейтинг: 0 / 0
Серьезная проблема с возвращением курсора через ADO
    #32011682
maski_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если это притянутое за уши тогда покажите плиз как выкачать таблицу из сервера не используя курсоры
С курсорами то дополнительные проблемы с закрытием.
ИЛИ Я ЧЕГО-ТО СИЛЬНО НЕ ПОНИМАЮ????????
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Серьезная проблема с возвращением курсора через ADO
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]